IBM和SAP开源其JVM诊断工具

IBM最近发布了其Java诊断工具套件,该套件包含以下工具:面向Java的产品转储分析器(Dump Analyzer)、处理垃圾收集(GC,即Garbage Collection)的Extensible Verbose Toolkit和Java锁分析器(JLA,即Java Lock Analyzer)。IBM的 alphaWorks团队从事这些JVM工具的开发工做,而且在一个叫作 Java diagnostics, IBM style的技术系列文章中公布了关于如何使用它们的一些细节信息。SAP上个月也发布了一个关于其堆分析器工具(heap analyzer tool)的 声明,该工具叫作SAP内存分析器(SAP Memory Analyzer),该工具已集成到Eclipse IDE中。

对于从事或者被迫从事(有时就是这种状况)分析和解释JVM性能及诊断数据的工做的那些Java开发者来讲,在工做时并无多少敏捷开源的工具可供使用,而仅仅经过查看文本格式的日志文件内容来分析JVM的性能会让人感到很是沮丧。尤为是当开发小组被告知将与JVM相关的分析诊断工做推迟到产品环境中,这个问题就更让人不知所措了,由于在Java产品环境中很难去分析日志而且快速定位问题产生的根源。对于线程产生的日志则更是如此,在没有可视化工具的支持下去解释和分析它将是异常复杂的。php

Java Dump AnalyzerGarbage Collection Analysis Toolkit能够IBM的JVM上运行,能够经过IBM Support Assistant(ISA)下载得到,ISA是一个免费的软件平台,咱们能够用其下载或者与IBM的软件产品协同工做。html

转储分析器(Dump Analyzer):

该工具能对已产生且格式化良好的系统转储文件进行基本的分析工做,能够从ISA程序或者命令行中加载。它基于IBM的面向Java的诊断工具框架(Diagnostic Tooling Framework for Java or DTFJ),该框架是一套API集合,用来构建其余的Java诊断工具。DTFJ的API容许工具对问题进行分析而且在分析结果中产生报告信息。java

使用转储分析器进行分析的过程是从建立一个基于用户已选择数据的DTFJ映像开始的,该映像包含了运行时参数,Java线程和堆中的对象等整个操做系统的全貌。而后它基于用户选定的模块对映像进行分析。一旦对全部选定模块的分析工做所有完成,转储分析器将产生一个HTML或ASCII格式的分析结果报告。web

转储分析器是可扩展的,Java开发者能够经过继承其API来编写本身的定制分析模块架构

垃圾收集分析工具:

咱们能够用该工具来诊断冗长的GC日志和一些与内存相关的JVM性能问题。若是配置错误的话,JVM中的GC进程将消耗更多的资源,最终会让Java应用变得很慢,甚至可能使其崩溃。该工具能处理IBM JRE1.4.2及更高版本的日志,它还能被用来分析WebSphere Real Time sever产生的GC日志。框架

该工具能够分析单独的GC日志,也能对多个日志文件进行并列比较,当咱们经过比较代码改动先后垃圾回收的趋势来解决内存泄露或JVM性能问题时,这一功能就很是有用。开发人员还能够对GC日志进行数据过滤,将注意力集中在特定内容上。该工具还提供了模板,让Java开发者保存个性化的设定以供未来使用。jsp

IBM developerWorks网站上还发布了关于该工具的文章以说明如何安装、加载该工具,如何打开一个文件进行分析以及如何同时比较多个文件。该文章还涵盖了三个学习用例:关于内存泄露的诊断,如何调整JVM的堆空间大小以及如何基于垃圾回收日志来评估Java应用的吞吐量。工具

锁分析器(Lock Analyzer):

面向Java的锁分析器是IBM alphaWorks的一个项目,能够为在线java应用提供一个实时、动态的锁监视器。它运行在IBM的JVM(5.0或更高版本)上,对java应用进行锁分析以提供线程活动,线程对锁的争夺以及同步问题的细节信息。

锁分析器的架构包含了两个组件:JLAagent和JLAGui,前者提供了与JVM的链接以搜集正在运行应用的锁信息,后者是一个基于Swing的GUI组件,提供对锁分析数据的图形化显示。JLAGui经过MBeans API链接到JLAagent,所以服务端和GUI客户端既能够在本地、也能够远程进行通讯。性能

SAP的Memory Analyzer能够用来查看堆转储,堆转储是在其生成那一刻JVM内存中全部对象的快照。该内存分析器支持来自SUN,HP和SAP(JDK1.4.2,Java SE 5和 6)的一系列JVM,因为它基于Eclipse RCP(Rich Client Platform),因此它能够做为独立产品来使用,也能够做为Eclipse插件来使用,咱们能够直接在Eclipse中加载它。学习

该内存分析器提供了不一样的视图来查看堆中的信息,这是经过“类的柱状图群(Class Histogram Grouping)”来实现的,它显示了内存中全部对象的一个列表,而且显示了对象的数量以及他们所占据的堆空间大小(单位为字节)。咱们能够经过“支配树(Dominator Tree)”视图查看占据最大堆空间的那些对象(单个对象或是一个类的一组对象),若是这些对象能够被垃圾回收器回收,那么它们所占据的堆空间就会被释放。其余的视图还包括“Leak Suspects”视图和“Paths from GC roots”视图,前者显示可能致使内存泄露的那些对象,后者显示了可能致使内存泄露的对象的垃圾收集的细节以及他们在垃圾收集过程当中的源头。全部这些视图都以可视化的方式来展示应用中还没有被垃圾收集进程清理的对象。

当须要分析JVM日志时,除了IBM和SAP外,咱们手边还有其余一些免费的JVM日志查看工具可使用。下面是这些工具的一个列表,按照他们所支持的分析类型来进行的分类。

线程转储分析:

在这个类别里,IBM Thread and Monitor Dump分析器、Thread Dump分析器和Lockness是比较经常使用的线程日志分析器。

IBM Thread Dump Analyzer只能在IBM支持的JVM上工做,本文做者试图在java应用中使用Sun的JVM开启一个线程,可是该工具没法识别该线程日志的格式。TDA是一个能够对线程日志进行离线分析的实用工具。Lockness analyzer是一个Eclipse插件,所以它能够在Eclipse中加载。

堆快照分析(Heap snapshot analysis):

IBM Heap Analyzer使得java开发者能够经过堆日志来查看JVM内存信息,该工具与Sun的JDK协同工做,可是在显示堆中的细节信息时它不如SAP的内存分析器来的直接。

HAT是java.net上的一个项目,它能以一系列网页的形式来显示堆中的信息,并以不一样的视图展现内存的使用细节。有几个显示堆信息的视图可供咱们使用,可是在不一样的视图间追踪堆中的细节绝非易事。

HPjTuneHPjMeter是来自HP的堆分析工具。本文做者试图打开在Sun JVM上运行的java应用所产生的堆信息日志时,HPjTune却没法识别该文件。

垃圾收集日志分析(GC log analysis):

在这个类别里,GCViewer是一个很是棒的工具,用来查看已产生的垃圾收集日志。它支持大多数公司的JVM,例如:Sun,IBM,HP-UX和BEA JRockit等。从命令行安装并运行它将很是简单。GCViewer以图表方式显示Young和Tenured generation的垃圾收集的信息,包括所有或局部垃圾收集时间。在Java Performance Tuning网站上关于GCViewer的一则评论讨论了如何根据垃圾收集日志,使用GCViewer来对一个典型的java应用进行性能调优。

新版的JDK(Java SE 5及后续版本)内置提供了优秀的 JVM监视和管理能力,可是对于那些仍然使用早期的JDK版本(JDK1.4及更早版本)工做的开发者来讲,若是要分析JVM日志,本文所讨论的工具就可派上用场。这些工具都有本身独有的特性,开发者必须先对工具进行评估,再决定使用哪一款进行JVM性能监控和错误诊断。

相关文章
相关标签/搜索