`

JROCKIT MISSION CONTROL简介

 
阅读更多

摘要

  BEA JRockit Mission Control是一组功能强大的工具,它是与BEA JRockit 5.0 R26 JDK一起提供的。这些工具提供先进且不显眼的JVM监控和管理,适用于开发和生产环境。本文简要介绍了JRockit Mission Control,描述了该套件中的主要组件,该套件的组件与其他竞争技术之间的区别,以及如何使用它们来管理JRockit JVM部署。

简介

  JRockit Mission Control是与JRockit 5.0 R26 JDK一起提供的工具的总称。它是一组Swing应用程序,用于以不同的方式收集和分析来自JRocikit运行时的信息。JRockit Mission Control的下一个版本将基于Eclipse Rich Client Platform以及以Eclipse插件形式出现的独立工具。

  当前用于监控、管理和分析Java运行时的大部分技术都使用了相当具有 侵入性的技术,比如字节码装置和JVMPI(现已废弃不用并被JVMTI所取代)。JRockit Mission Control主要关注在完成必需的工具检测的同时对运行的系统造成最小的影响。它所使用的技术还使得工具与JVM断开连接之后应用程序立刻可以以全速运 行。因此,JRockit Mission Control适用于在生产环境中使用。它的开销非常小,这可以将Heisenberg效应降至最低,并为应用程序提供比其他开销更大的技术更有代表性的 数据。

  下面让我们看一看JRockit Mission Control的各个组件。

JRockit Management Console

  JRockit Management Console是一个基于JMX的控制台,用于管理和监控JRockit JVM。它提供至关重要的状态数据和控制JRockit JVM的运行时特性的方法。在这些属性中,可以监控的是live set、堆使用、CPU负载和由在JVM内部平台MBean服务器中注册的MBean所公开的其他所有属性。JRockit Management Console还包括一个开销低的方法分析器和一个异常计数器。

  要使用JRockit Management Console来监控JRockit JVM,首先必须启动要监控的JVM中的管理代理。为此,可以使用JRCMD或Ctrl-Break Handler,借助于the_Xmanagement标志(参见JRockit Management Console文档)来启动JRockit JVM。还可以使用JRCMD和Ctrl-Break Handler来关闭管理代理。JRockit Management Console由一个运行在JRockit进程中的代理和一个独立的JRockit Management Console Swing应用程序组成,前者用于公开在JVM内部平台MBean服务器中注册的MBean。

  如图1所示,可以将多个JRockit Management Console实例连接到一个JRockit JVM上,而且一个Management Console也可以连接到多个JRockit JVM。Management Console应该运行在不同的机器上,或者使用–settings选项标志以使用不同的设置文件。注意,因为控制台可以处理多个JRockit JVM,通常不需要在同一台机器上运行多个Management Console。

图1

   图1: BEA JRockit Management Console 通信(单击图像查看大图)

  从高级架构的角度来说,被监控的JRockit包括:

  1. 一 组接口——到java.lang管理接口的JRockit扩展。也存在一个动态生成的MBean,用于把JRockit的所有性能计数器公开为属性。这些 扩展被内部命名为java.lang.management扩展,或者简写为JLMEXT。
  2. 一个用于公开这些接口的代理——与控制台 的通信是借助于基于RMI的远程JMX来实现的。
  3. JDP (JRockit Discovery Protocol) Server——Management Console通过使用多播传递特定JRockit的位置而执行自动检测。JDP Server是可选的。为了支持JDP,需要使用-Djrockit.managementserver.autodiscovery=tru系统属性选 项来启动JVM。

  Method Profiler提供一种开销非常低的方法来统计一个方法被调用的次数以及在该方法上花费的时间。只需使用少量装置代码就可以重新生成感兴趣的方法,而且 只要分析器一停止,这些代码就会被删除。因此,使用方法分析器的开销只有在对选定方法进行分析的时候,而且只有被选定的方法才会有这种开销。特定于 JRockit的接口的相关Javadocs发布在Mission Control的主页上。

   从高级架构的角度来看,Management Console Swing应用程序包括:

  1. RJMX (JRockit Remote JMX服务)——提供持久化、属性订阅抽象和通知框架之类的服务。
  2. JDP Client——自动发现支持JDP的JRockit JVM。
  3. Management Console GUI (参见图2)——Swing应用程序。

图2
图2: BEA JRockit Management Console (单击图像查看大图)

  Management Console应用程序引入了属性订阅(Attribute Subscription)的概念,这个经过简化的概念是由MBean ObjectName、Attribute Name和订阅时间间隔来定义的。控制台允许用户添加通知规则,区分和持久化来自这类属性订阅的数据。属性订阅可以基于常规的JMX MBean属性,来自一个属性的单个复合数据键,或者JMX通知数据(因为来自这类订阅的事件都是异步传输的,所以在这里订阅时间间隔没有什么意义)。可 以根据数据的其他几种属性订阅创建自己的复合属性订阅,或者甚至创建由实现者来提供数据的合成属性订阅。

  总而言之,JRockit Management Console是十分灵活的。JMS监控器和管理工具提供了很多有价值的功能:

  1. 以图形的方式显示任意数字 属性。
  2. 持久化任意属性集以达到离线分析的目的。
  3. 特殊的属性订阅,用于以图形的方式方便地显示暂停时间、live set使用和连续的堆使用情况。
  4. 当特定属性的用户指定条件出现时,通知规则可以发挥作用。
  5. 用户可以插入自己的 通知动作和约束的代码。
  6. Java运行时的管理,包括动态修改垃圾收集策略、堆大小、nursery大小、JRockit进程相似性、 启用/禁用冗长标志等等。
  7. 低开销的方法分析器。
  8. 异常计数器。
  9. 一种启动JRockit Runtime Analyzer 记录的方法。
  10. 一种动态调用MBean操作的方法。
  11. 一种调用JRockit Ctrl-Break Handler的方法。

  想要了解更多有关如何配置控制台以使用SSL、身份验证和角色的信息,请 参考JRockit文档。

JRockit Runtime Analyzer (JRA)

  JRA是一个Java应用 程序,同时也是一个JVM分析器。它在JRockit开发团队中已经存在了相当长一段时间,创建它的原始目的是让JRockit开发人员能够找到良好的方 法来基于现实应用程序优化JVM,但是事实证明,它对于帮助客户在生产和开发环境中解决问题十分有用。为什么JVM用户无法让JVM开发人员访问或处理整 个应用程序呢?这有很多原因。JRA的工作方式就像一个动态的记录器,它记录了Java应用程序和JVM在一段预定的时间内的行为。然后,您可以使用 JRA应用程序来分析记录过程,例如,可以分析热门方法的调用跟踪、错误的同步和其他重要的应用程序/JVM行为。BEA支持机构一般使用来自客户的 JRA记录来帮助BEA客户解决问题。

   JRA由两个部分组成:JVM中的记录引擎和可以用于分析结果记录的GUI应用程序。记录引擎使用的信息源有几种,包括JRockit Hot Spot Detector(优化引擎也使用它来决定应该优化哪些方法)、操作系统、JRockit Memory System(最出名的就是垃圾收集器)和JRockit锁定分析器(如果支持的话)。

   借助于JRA工具,您可以通过图形轻松地分析JRA记录中包含的信息(如图3所示)。图上可以显示暂停时间、堆使用和记录期间提交的堆大小。可以选择任意 的垃圾收集(GC),它会提供有关特定垃圾收集的十分详细的信息。可以获取对热门方法的调用跟踪——不仅仅是为调用方法做准备的调用跟踪,还包括描绘通常 接下来会调用的方法的调用跟踪。调用跟踪还显示是否调用了一个方法的优化版本。

图3
图 3: BEA JRockit Runtime Analyzer (单击图像查看大图)

   在记录过程的开始和结束阶段都会使用堆直方图,它可以说明每个类(例如占据超过所使用堆控件0.5%的类)所使用的堆空间大小。所收集的堆信息也用于显示 堆使用情况的饼形图。

   记录时产生的开销非常低——通常低于2%。然而,因为JRA在记录过程开始和结束阶段都会进行一次完全的垃圾收集,以生成堆直方图数据,所以记录过程的开 始和结束阶段都会出现一个开销的高峰。

   有几种启动JRA记录的方式:

  1. 使用JRockit Management Console。
  2. 使用JRCMD。
  3. 使用支持JMX的 java.lang.managemetn类的JRockit扩展。
  4. 使用JRA -XXjra 命令行参数。

   还可以使用通知规则从Management Console触发JRA记录,例如,可以创建一条规则,当CPU负载超过90%时启动JRA记录。

    可以这样说,JRA是一个功能强大的JVM和Java应用程序分析器,它提供了一下功能:

  1. 有效地分析JVM和Java应用程 序(开销通常低于3%)。
  2. 方法调用跟踪显示了采用哪条路径到达方法以及接下来会调用哪个方法。
  3. 方法热点表,说明 最常被调用的方法是哪些。
  4. 十分详细的垃圾收集统计信息,说明每个GC过程中发生的各种情况。
  5. 垃圾收集策略更改。
  6. 堆使用和暂停时间的图表显示。
  7. 堆直方图,显示在记录过程的开始和结束阶段每个类对堆的使用情况。
  8. 详 细的锁定分析,显示存在争用时采用了哪些锁定、它们被使用了多少次等等。
  9. 显示每个对象使用堆空间情况的饼形图,包括存储碎片。
  10. 在 记录期间优化了哪些方法。

  想要了解有关使用JRA的更多信息,请参考JRockit Mission Control 文档。

JRockit Memory Leak Detector

  JRockit Memory Leak Detector工具可以帮助您快速发现内存泄漏。虽然Java的自动内存管理机制把开发人员从显式地分配和释放所使用内存的重担下解放出来,但如果程序 继续引用不再有用的对象时,内存泄漏还是有可能发生。

   JRockit Memory Leak detector 为用户提供了一个趋势分析,让用户能够快速找到甚至减缓内存泄漏。趋势分析可以说明应用程序中每个类使用堆空间的情况。它将告诉您某一类型的实例使用了多 少空间、它们占用了堆的哪一部分、存在多少个实例以及每秒钟堆空间使用的增加速度(以字节为单位)。

   JRockit Memory Leak Detector还提供快速找出泄漏原因的手段。可以在趋势分析表中选择一个怀疑类型,所有具有指向选中类型的实例的类型都可以显示在一个图中(如图4所 示)。图形节点可以随意展开,用户可以回溯到导致引用的最终原因。类的实例可以被显示和内观,指向一个选中实例的所有实例都可以在一张实例图中显示出来。 可以打开分配跟踪,跟踪某个类的所有分配情况。

   想要查看有关如何使用该工具的例子和指导,请参见JRockit Mission Control 文档和dev2dev上的文章:Memory Leaks, Be Gone!。

图4
图 4: BEA JRockit Memory Leak Detector (单击图像查看大图)

   启动一个Memory Leak Detector会话时,就会同时启动一个Memory Leak Server (MLS)。根据连接到的JRockit的JDK版本,所使用的要么是JMX connector in JLMEXT (5.0),要么是Rockit Management Protocol (RMP) (1.4)。请注意协议的不同和网络特性及安全的区别。Memory Leak Server是一个本地服务器,借助于它,通信的余下部分便可以在会话发生的期间完成。在客户端,可以使用一个Java API与本地服务器通信(参见图5)。使用本地服务器的原因是,如果出现严重的内存泄漏情况,而JRockit用完了Java堆,JRockit将无法再 运行Java代码。

图5
图 5: BEA JRockit Memory Leak Detector通信 (单击图像查看大图)

   Memory Leak Detector工作在垃圾收集器的标记阶段,用于添加一些薄记来记录堆直方图(每个类合计使用的堆内存的统计信息)和生成趋势分析。在竞争性的工具中, 找出内存泄漏的常用解决方案是对整个系统的整个堆取几个快照,然后比较这些快照。在生产环境中存在具有数亿兆字节的系统,在这样的系统中,这种方法并不可 行。借助于JRockit Memory Leak Detector,只有感兴趣的信息才会进行在线传送,这使得它对带宽的要求很低。当使用分配调用跟踪功能时,只有涉及到所选类的分配点的代码才会被检 测。此外,当会话一结束,或者分配跟踪被关闭,检测就会被删除,而涉及到这些分配点的代码又将全速执行。

   总而言之,JRockit Memory Leak Detector是一种先进的分析工具,它具有大量新特性:

  1. 它可以执行趋势分析,这样做甚至可以发现缓 慢的内存泄漏。
  2. 它进行在线分析,依赖于JRockit Memory Manager,而不是多次把整个堆转储到客户端,并分析其区别。
  3. 它提供一个高级的用户界面,让用户可以找到并分析泄漏类型和其他类 型之间的关系,或者泄漏实例和其他实例之间的关系。
  4. 检测器带来的开销很低,可以用于生产环境中的在线分析。
  5. 不使 用字节码检测。当使用Memory Leak Detector进行分析时,Java代码将继续执行,就好像它从未连接上一样。不需要修改任何Java代码。

  可以 说,JRockit Memory Leak Detector是发现和找出Java内存泄漏原因的最佳工具。想要了解有关JRockit Memory Leak Detector的更多信息,请参考JRockit Mission Control 文档。

结束语

  现 在的JRockit JDK包含一个多用途的工具套件,可用于进行监控、管理、分析和消除应用程序中的内存泄漏。JRockit Mission Control可免费用于开发。它可以可靠地用在生产环境中,而且在使用之后,也不会在系统中留下任何痕迹。在实际应用中,它所引起的性能开销要比其他工 具小的多。

参考资料

  • Memory Leaks, Be Gone!,作者Staffan Larsen (dev2dev, 2005年6月) ——提供大量有关内存泄漏检测系统的信息。
  • New Features and Tools in JRockit 5.0,作者Eva Andreasson (dev2dev, 2005年2月)——总结了JRockit 5.0中的许多特性,虽然有些过时,但仍然实用。
  • dev2dev站点上的JRockit Product Center
  • dev2dev 站点上的Mission Control section——包含更多关于JRockit工具的信息。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics