IBM和SAP开源其JVM诊断工具
作者 Srini Penchikala译者 张龙 发布于 2007年11月24日 上午8时49分
社区
Java
主题
工件和工具
标签
SAP,
IBM
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产品环境中很难去分析日志并且快速定位问题产生的根源。对于线程产生的日志则更是如此,在没有可视化工具的支持下去解释和分析它将是异常复杂的。
Java Dump Analyzer和Garbage Collection Analysis Toolkit可以IBM的JVM上运行,可以通过IBM Support Assistant(ISA)下载获得,ISA是一个免费的软件平台,我们可以用其下载或者与IBM的软件产品协同工作。
转储分析器(Dump Analyzer):
该工具能对已产生且格式化良好的系统转储文件进行基本的分析工作,可以从ISA程序或者命令行中加载。它基于IBM的面向Java的诊断工具框架(Diagnostic Tooling Framework for Java or DTFJ),该框架是一套API集合,用来构建其他的Java诊断工具。DTFJ的API允许工具对问题进行分析并且在分析结果中产生报告信息。
使用转储分析器进行分析的过程是从创建一个基于用户已选择数据的DTFJ映像开始的,该映像包含了运行时参数,Java线程和堆中的对象等整个操作系统的全貌。然后它基于用户选定的模块对映像进行分析。一旦对所有选定模块的分析工作全部完成,转储分析器将产生一个HTML或ASCII格式的分析结果报告。
转储分析器是可扩展的,Java开发者可以通过继承其API来编写自己的定制分析模块。
垃圾收集分析工具:
我们可以用该工具来诊断冗长的GC日志和一些与内存相关的JVM性能问题。如果配置错误的话,JVM中的GC进程将消耗更多的资源,最终会让Java应用变得很慢,甚至可能使其崩溃。该工具能处理IBM JRE1.4.2及更高版本的日志,它还能被用来分析WebSphere Real Time sever产生的GC日志。
该工具可以分析单独的GC日志,也能对多个日志文件进行并列比较,当我们通过比较代码改动前后垃圾回收的趋势来解决内存泄露或JVM性能问题时,这一功能就非常有用。开发人员还可以对GC日志进行数据过滤,将注意力集中在特定内容上。该工具还提供了模板,让Java开发者保存个性化的设定以供将来使用。
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上的一个项目,它能以一系列网页的形式来显示堆中的信息,并以不同的视图展示内存的使用细节。有几个显示堆信息的视图可供我们使用,但是在不同的视图间追踪堆中的细节绝非易事。
HPjTune和HPjMeter是来自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性能监控和错误诊断。
查看英文原文:IBM and SAP Open Source their JVM Diagnostics Tools
译者简介:张龙,同济大学软件工程硕士,现就职于理光软件研究所。主要从事文档工作流和办公自动化解决方案的研发工作。热衷于Java轻量级框架的研究,对敏捷方法很感兴趣。曾有若干年的J2EE培训讲师经历。参与InfoQ中文站内容建设,请邮件至china-editorial@infoq.com。
分享到:
相关推荐
阿里开源的JVM诊断工具Arthas是一款强大的Java运行时诊断和分析工具,其最新版本为`arthas-packaging-3.6.6`。这款工具旨在帮助开发者在不重启应用的情况下,解决线上问题,进行性能优化,以及深入理解应用程序的...
管理员还需要确保定期更新SAP JVM,以保持其安全性。 7. **性能监控**:SAP JVM提供了丰富的JMX(Java Management Extensions)和JFR(Java Flight Recorder)功能,帮助管理员监控和分析JVM的性能,如内存使用、...
SAP JVM 7.1 64位是一个专为SAP系统设计的Java虚拟机,它主要用于运行SAP的应用程序和服务。这个版本是基于64位架构,这意味着它可以处理更大的内存,更适合处理大规模的企业级数据和复杂计算。下面将详细讨论SAP ...
开源的JVM,如标题中提到的,允许开发者深入理解JVM的工作原理,并可以参与到其改进和优化的过程中。 "jamvm-1.2.0" 是一个特定版本的开源JVM实现,名为JamVM。JamVM是一个小型、快速的JVM,设计用于嵌入式系统和...
IBM HeapAnalyzer是一款强大的Java虚拟机(JVM)内存分析工具,专为诊断和解决Java应用程序的内存泄漏问题而设计。这个工具能够帮助开发者深入理解Java应用程序的内存使用情况,从而优化性能并防止由于内存泄漏导致...
9. **lib**:这个目录存储了SAP JVM的库文件,比如JVM的动态链接库(.dll或.so),以及其他必要的库,供应用程序和工具使用。 10. **demo**:可能包含了一些示例代码或演示应用,展示如何使用SAP JVM和其相关工具,...
arthas阿里的开源jvm监控工具,可以用于JVM的调优,快速生成JVM的运行图,方便开发,具体可见阿里的git
4. **OpenJDK**: OpenJDK是Java Development Kit(JDK)的一个开源实现,包含了编译器、JVM和Java类库。与Oracle JDK相比,OpenJDK更加开放,允许开发者查看源代码并进行修改。在搭建Java开发平台时,OpenJDK与JVM...
本书按照逐步深入的方式组织内容,首先介绍了IBM SDK, Java Technology Edition, Version 5.0的基本概念,随后深入探讨了JVM的工作原理以及如何诊断和解决问题。建议读者从头到尾阅读本书,以便获得完整的知识体系。...
Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱。 当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决: 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception? 我改的代码为什么没有执行到...
IBM Java虚拟机(JVM)为开发者提供了丰富的配置选项来优化应用程序性能、诊断问题以及调整各种资源使用情况。本文将详细解释IBM JVM中的关键参数及其功能,帮助您更好地管理和调优Java应用。 #### 基础参数 1. **-...
IBM JVM 分析工具,JCA,javaCore查看工具
Java虚拟机(JVM)是运行Java程序的基础环境,其性能直接影响到应用程序的稳定性和响应速度。为了更好地理解和优化JVM的运行状态,开发人员需要掌握一系列的监控工具和技术。本文将详细介绍JDK自带的一些强大的JVM...
Arthas是一款基于 Java 的开源诊断工具,可以在不修改应用程序源代码的情况下,对生产环境的 Java 应用程序进行快速诊断。它提供了许多强大的命令行工具,可以帮助开发人员实时监控应用程序的运行状态,以及分析和...
SAP JVM,全称为SAP Java Virtual Machine,是SAP公司为了在其产品中运行Java应用程序而定制的一款Java虚拟机。这款虚拟机是基于Oracle的HotSpot JVM进行优化和扩展的,以更好地适应SAP的业务需求和性能要求。在64位...
在现代的软件开发与运行环境中,Java虚拟机(JVM)的性能调优是非常重要的一环,特别是在处理...熟练运用JVM调优工具可以为开发者提供一套强大的问题诊断和性能提升手段,最终实现更加高效、稳定的应用程序运行环境。
首先,JProfiler11是一款专业级别的Java性能分析工具,它能够对JVM进行深入的内存和CPU分析。通过集成到Idea中,开发者可以直接在IDE内部进行性能检测,无需离开熟悉的开发环境。只需下载JProfiler11的安装包,并...
`jstat` 是Java监控和诊断工具的一部分,用于收集JVM的各种运行时统计信息,如垃圾收集器的状态、类装载情况、内存使用等。它能实时监控JVM性能,对性能调优非常有帮助。例如,`jstat -gc`可以显示垃圾回收的详细...
在Java应用程序的开发和运行过程中,了解JVM的工作原理,监控其状态,以及进行性能调优是至关重要的。本文将深入探讨JVM内存结构、监控工具及其在调优和GC优化中的应用。 **JVM内存机构** JVM内存主要分为以下几个...
**Arthas(阿尔萨斯):阿里巴巴开源的在线分析诊断工具** Arthas,源自阿里巴巴,是一款强大的Java在线诊断工具,旨在帮助开发者解决在生产环境中遇到的各种问题,如性能瓶颈、异常排查、代码问题等。它提供了一...