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是一个基于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: BEA JRockit Management Console 通信(单击图像查看大图)
从高级架构的角度来说,被监控的JRockit包括:
Method Profiler提供一种开销非常低的方法来统计一个方法被调用的次数以及在该方法上花费的时间。只需使用少量装置代码就可以重新生成感兴趣的方法,而且 只要分析器一停止,这些代码就会被删除。因此,使用方法分析器的开销只有在对选定方法进行分析的时候,而且只有被选定的方法才会有这种开销。特定于 JRockit的接口的相关Javadocs发布在Mission Control的主页上。
从高级架构的角度来看,Management Console Swing应用程序包括:
图2: BEA JRockit Management Console (单击图像查看大图)
Management Console应用程序引入了属性订阅(Attribute Subscription)的概念,这个经过简化的概念是由MBean ObjectName、Attribute Name和订阅时间间隔来定义的。控制台允许用户添加通知规则,区分和持久化来自这类属性订阅的数据。属性订阅可以基于常规的JMX MBean属性,来自一个属性的单个复合数据键,或者JMX通知数据(因为来自这类订阅的事件都是异步传输的,所以在这里订阅时间间隔没有什么意义)。可 以根据数据的其他几种属性订阅创建自己的复合属性订阅,或者甚至创建由实现者来提供数据的合成属性订阅。
总而言之,JRockit Management Console是十分灵活的。JMS监控器和管理工具提供了很多有价值的功能:
想要了解更多有关如何配置控制台以使用SSL、身份验证和角色的信息,请 参考JRockit文档。
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: BEA JRockit Runtime Analyzer (单击图像查看大图)
在记录过程的开始和结束阶段都会使用堆直方图,它可以说明每个类(例如占据超过所使用堆控件0.5%的类)所使用的堆空间大小。所收集的堆信息也用于显示 堆使用情况的饼形图。
记录时产生的开销非常低——通常低于2%。然而,因为JRA在记录过程开始和结束阶段都会进行一次完全的垃圾收集,以生成堆直方图数据,所以记录过程的开 始和结束阶段都会出现一个开销的高峰。
有几种启动JRA记录的方式:
还可以使用通知规则从Management Console触发JRA记录,例如,可以创建一条规则,当CPU负载超过90%时启动JRA记录。
可以这样说,JRA是一个功能强大的JVM和Java应用程序分析器,它提供了一下功能:
想要了解有关使用JRA的更多信息,请参考JRockit Mission Control 文档。
JRockit Memory Leak Detector工具可以帮助您快速发现内存泄漏。虽然Java的自动内存管理机制把开发人员从显式地分配和释放所使用内存的重担下解放出来,但如果程序 继续引用不再有用的对象时,内存泄漏还是有可能发生。
JRockit Memory Leak detector 为用户提供了一个趋势分析,让用户能够快速找到甚至减缓内存泄漏。趋势分析可以说明应用程序中每个类使用堆空间的情况。它将告诉您某一类型的实例使用了多 少空间、它们占用了堆的哪一部分、存在多少个实例以及每秒钟堆空间使用的增加速度(以字节为单位)。
JRockit Memory Leak Detector还提供快速找出泄漏原因的手段。可以在趋势分析表中选择一个怀疑类型,所有具有指向选中类型的实例的类型都可以显示在一个图中(如图4所 示)。图形节点可以随意展开,用户可以回溯到导致引用的最终原因。类的实例可以被显示和内观,指向一个选中实例的所有实例都可以在一张实例图中显示出来。 可以打开分配跟踪,跟踪某个类的所有分配情况。
想要查看有关如何使用该工具的例子和指导,请参见JRockit Mission Control 文档和dev2dev上的文章:Memory Leaks, Be Gone!。
图 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: BEA JRockit Memory Leak Detector通信 (单击图像查看大图)
Memory Leak Detector工作在垃圾收集器的标记阶段,用于添加一些薄记来记录堆直方图(每个类合计使用的堆内存的统计信息)和生成趋势分析。在竞争性的工具中, 找出内存泄漏的常用解决方案是对整个系统的整个堆取几个快照,然后比较这些快照。在生产环境中存在具有数亿兆字节的系统,在这样的系统中,这种方法并不可 行。借助于JRockit Memory Leak Detector,只有感兴趣的信息才会进行在线传送,这使得它对带宽的要求很低。当使用分配调用跟踪功能时,只有涉及到所选类的分配点的代码才会被检 测。此外,当会话一结束,或者分配跟踪被关闭,检测就会被删除,而涉及到这些分配点的代码又将全速执行。
总而言之,JRockit Memory Leak Detector是一种先进的分析工具,它具有大量新特性:
可以 说,JRockit Memory Leak Detector是发现和找出Java内存泄漏原因的最佳工具。想要了解有关JRockit Memory Leak Detector的更多信息,请参考JRockit Mission Control 文档。
现 在的JRockit JDK包含一个多用途的工具套件,可用于进行监控、管理、分析和消除应用程序中的内存泄漏。JRockit Mission Control可免费用于开发。它可以可靠地用在生产环境中,而且在使用之后,也不会在系统中留下任何痕迹。在实际应用中,它所引起的性能开销要比其他工 具小的多。