本文主要讨论IBM相关JVM诊断工具的使用,并结合具体应用给出示例。
随着信息技术的不断发展,计算机在各行各业得到越来越广泛的应用,应用系统结构也越来越复杂和庞大,系统的性能问题已经成了系统发挥效率的关键所在,通常处理这些问题都是软件开发人员根据其以往的开发经验,设计的好坏受人为因素影响很大,且方案因人而异。一般来说,一个系统存在瓶颈是必然的,不可能完全消除,但是合理的进行瓶颈定位,并对性能进行优化将能极大的提高系统的效率。
Java由于其具有跨平台的先天优势,以及对Web的良好支持,在分布式应用尤其是异构环境中成为首选,因此目前基于J2EE的应用与基于微软.net平台(和windows的近亲关系、及其集百家之长的特性决定了其优势)的应用已形成二分天下之势,其他语言或者平台的应用相对较少,大部分只能在两大阵营中漏下的市场中分得一杯羹。本节并不打算讨论哪种语言或者平台孰优孰劣,技术的发展日新月异,谁也不能保证是最后的王者。本节主要介绍IBM提供的相关Java诊断工具的用法:
在IBM官方网站上,我们找到了如下表所示的J2EE诊断工具,严格来说它们是JVM工具,IBM也是这样归类的,包括但不限于对Websphere服务器的性能诊断:
表一:IBM常用JVM诊断工具
虽然网上提供了各种工具的单独下载,但是笔者建议采用IBM Support Assistant(目前的最新版本是V4.1),它是IBM提供的一款免费的桌面应用程序,集成了包括工具在内的所有功能,可简化 IBM 软件的故障诊断工作(通过自助方式或在技术支持协助下进行),IBM Support Assistant 提供了四个重要功能,用于进行自助故障诊断或利用 IBM 支持流程:
-
搜索 (Search):IBM 支持信息包含在 IBM“知识天堂”的多个位置。有时候,已经提供了关于某个问题或操作问题的回答,但尚不能访问。IBM Support Assistant 搜索组件提供简单易用的界面,可搜索很多不同的知识库,从而能更方便地找到所需要的信息。
-
产品信息 (Product information):通过此组件,可快速访问您所感兴趣的 IBM 产品的支持资源。所列出的支持资源由 IBM 支持团队亲手挑选,可作为提高技术和进行故障诊断的信息工具使用。
-
工具 (Tools):IBM Support Assistant 还提供了用于访问多个免费故障诊断和诊断工具的框架。这些工具不仅能帮助您使用 IBM 产品,还能够帮助您处理自己的应用程序。
-
服务 (Service):此组件可帮助您在与 IBM 支持交互时利用其支持流程。
下面介绍如何获得IBM Support Assistant帮助:
1、 进入IBM下载页面http://www-01.ibm.com/software/support/isa/:
2、 点击“Download”进入下载页面:
3、 这里提供了Serviceability Workbench和Enterprise Solution两个版本的下载,其中后者提供了远程问题收集解决功能,这里我们选择Serviceability Workbench,点击“Download”进入下载页面(注意IBM需要提供一个IBM帐号进行登陆,没有帐号可以在线注册):
4、 目前V4.1版提供了Linux 和Windows两个版本的下载,请根据需要选择,这里我们选择Win32版本的,选择isa.wb.410-win32.zip下载:
5、 下载到本地后解压,文件如下:
6、 运行setupwin32.exe
就可以开始安装了(注:IBM Support Assistant以及后面的相关工具是采用纯Java编写的,需要Java运行时环境支持,请确保机器上已预装JRE,经验证V4.1支持Java5.0及以上版本),安装成功后,首次运行的IBM Support Assistant面板如下,下次启动可以选择“启动活动”标签,选择相关功能即可:
7、 在以上的“主页”标签页中可以直观的看到,IBM Support Assistant提供了以下三个主要功能:
查找信息:轻松查找您需要的信息,包括特定于产品的信息和搜索功能;
分析问题:通过可维护性工具、一组诊断工件和通过问题确定提供的指导来诊断和分析问题;
收集和发送数据:使用自动数据收集来收集问题确定文件。使用这些文件进行自助问题确定,或者使用“服务请求”功能将这些文件随服务请求一起发送给 IBM。
8、 本节并不打算详细的介绍IBM Support Assistant的使用,更详细的信息请参考ibm.com 主页及支持主页的链接,下面主要介绍怎样获得最新的IBM工具以及如何使用。从检索工具开始,以工具“IBM Thread and Monitor Dump Analyzer”为例,IBM Support Assistant支持两种方式进行检索,第一种是直接通过“查找信息”来检索:
这种方式检索出了IBM和搜索词“IBM Thread and Monitor Dump Analyzer”相关的所有资源,当然也包括相关的文档以及Demo,笔者不建议使用这种方式,在列出的大量信息中查找工具是件极费时的事情,若是只检索工具可以采用如下方式,在面板中选择 更新–->查找新的...-->工具加载项(若是已经下载过工具,可以选择“查找对加载项的更新”选项,若是要对已下载的工具进行其他管理可选择“管理已安装的加载项”),将会列出目前IBM提供的所有工具:
9、 搜索到的工具如下:
10、 选择需要的工具“IBM Thread and Monitor Dump Analyzer”,下一步:
11、 下一步,选择“接受许可协议”:
12、 点击“完成”,开始安装工具到本地:
13、 点击“完成”,完成安装,其他工具的安装步骤和以上步骤类似。(需要重启IBM Support Assistant工作台):
14、 选择“分析问题”,找到我们刚刚安装的工具:
15、 在工具列表中选择“IBM Thread and Monitor Dump Analyzer”,可以看到描述里给出了该工具的简单介绍:“IBM Thread and Monitor Dump Analyzer for Java allows identification of hangs, deadlocks, resource contention, and bottlenecks in Java threads. This tool is a tech preview.”单击“启动”按钮,启动后的“IBM Thread and Monitor Dump Analyzer”工具如下:
实际上,工具都是以Java Application的方式运行的,如果不通过IBM Support Assistant工作台启动,可以直接在命令行采用”java –jar –jca37.jar”命令运行,效果是一样的。
16、 要分析问题,我们需要获得系统某个状态时的内存信息(一般会是系统即将宕机或者系统服务性能下降的情况),也就是内存转储或者java堆转储,以HP-UX为例(注意:Websphere在该系统上使用IBM java虚拟机才支持自动转储,这里我们采用手动转储,在IBM官方网站中有这样的描述:生成堆转储时会严重影响 WebSphere Application Server 的性能,请确定你确实需要这样做来找出问题),通过调用generateHeapDump来手动生成堆转储,输出文件:native_stdout.log。
这里介绍IBM Websphere的手动生成方式:
启动 wsadmin 脚本客户机。 要运行脚本命令,您有多个选项,这些选项包括以交互方式运行脚本命令以及在概要文件中运行脚本命令。例如,对 JVM MBean 调用 generateHeapDump 操作
查找 JVM objectName:
<wsadmin> set objectName [$AdminControl queryNames
WebSphere:type=JVM,process=<servername>,node=<nodename>,*]
对 JVM MBean 调用 generateHeapDump 操作:
<wsadmin> $AdminControl invoke $objectName generateHeapDump
其中:
$
|
是使用其值替换变量名的 Jacl 运算符
|
invoke
|
是命令
|
generateHeapDump
|
是要调用的操作
|
<servername>
|
是服务器的名称,将在该服务器上生成堆转储
|
<nodename>
|
是 <servername> 所属的节点
|
这样是从Websphere生成内存转储,而不是直接java内存转储,使用工具时请注意工具所支持的文件格式(参考表一)。
17、 故障诊断与定位,使用“IBM Thread and Monitor Dump Analyzer”打开java堆转储日志文件native_stdout.log,该工具支持Thread 和 Monitor两种模式查看,在某个项目中,我们发现了存在大量的进程等待,如下图:
18、 结论:经过分析,绝大多数的等待发生在同一个地方:ArrayList,难道是List()存在问题,继续跟踪,发现都这些等待都使用的是RMI方式通信,不难想象,是某种远程调用,而问题表现的恰恰是因为大量的远程调用中出现了线程等待,结合该项目的特点,我们发现,该项目的部署方式为,WEB模块+EJB模块,而两者分开部署,虽然这种方式更适合分布式的应用。问题就出在这,调用EJB时采用了大量的远程接口调用,根据EJB规范,远程调用时对象的传递需要进行序列化,正是这种序列化造成了大量的等待。
19、 建议:根据以上分析,我们找出了影响其性能的一个主要原因,WEB模块与企业逻辑EJB之间的通信存在问题,EJB2.0为了提高性能开始支持Local方式的EJB,但是LocalEJB和RemoteEJB的实现方式和调用方式都是不一样的(配置也不一样,可以通过程序自适应),RemoteEJB是通过RMI方式调用的,对象传递需要序列化,而LocalEJB是通过对象引用传递的,没有序列化,性能会高很多。所以针对该问题,建议尽量调用EJB的本地接口。该诊断最终获得客户认可,对系统的重新优化后,性能有了明显提高。
20、 以上仅仅从工具方面分析了项目中可能遇到的瓶颈问题,实际上,正如前面所说,一个完全不存在瓶颈的系统是不存在的,在这个项目中,我们实际上还发现了其他问题:比如配置的问题,对应用服务器、数据库的配置问题;另外,针对数据库的SGA命中率低的问题,我们给出了一些SQL的优化建议,这些都得到了客户的认可。
分享到:
相关推荐
### IBM SDK, Java Technology Edition, Version 5.0 — IBM Java JVM诊断指南 #### 关于IBM SDK, Java Technology Edition, Version 5.0 IBM SDK, Java Technology Edition, Version 5.0 是一个包含了Java运行时...
IBM HeapAnalyzer是一款强大的Java虚拟机(JVM)内存分析工具,专为诊断和解决Java应用程序的内存泄漏问题而设计。这个工具能够帮助开发者深入理解Java应用程序的内存使用情况,从而优化性能并防止由于内存泄漏导致...
**本书概述了IBM Java虚拟机(JVM)的工作原理、调试技巧以及可用于解决JVM问题的诊断工具。** 本书旨在帮助开发人员、系统管理员和技术支持工程师更好地理解IBM Virtual Machine for Java(以下简称IBM JVM)的...
例如,它可以提供丰富的监控和诊断工具,如JConsole、VisualVM等,帮助开发者分析和优化应用性能。此外,JVM参数的设置也至关重要,例如堆大小、新生代和老年代的比例、GC策略等,都需要根据应用特性和资源状况进行...
MAT(Memory Analyzer Tool)是IBM开发的一款强大的Java内存分析工具,专用于诊断和解决Java应用程序中的内存泄漏问题。MAT JVM内存分析工具可以帮助开发者深入理解Java虚拟机(JVM)的内存管理机制,通过分析堆内存...
IBM日志分析工具是专门针对IBM相关产品产生的日志进行深度解析和问题定位的工具集合。这些工具通常包括对特定类型的日志文件,如GC日志、heapDump日志和javaCore日志的分析功能。接下来,我们将深入探讨这些日志类型...
MAT,全称Memory Analyzer Tool,是IBM开发的一款强大的Java虚拟机(JVM)内存分析工具,尤其适用于Mac OS X平台。这款工具可以帮助开发者诊断和解决Java应用中的内存泄漏问题,提高应用性能。MAT通过深入分析堆转储...
IBM分析dump文件工具是针对IBM软件系统中出现的问题或异常情况的一种诊断手段。在IBM的众多产品线中,如DB2数据库、WebSphere应用服务器、z/OS操作系统等,都有可能产生dump文件,这些文件记录了系统运行时的内存...
MAT,全称Memory Analyzer Tool,是IBM开发的一款强大的JVM内存分析工具,尤其适用于诊断Java应用程序的内存泄漏问题。在Java开发过程中,内存溢出(Out Of Memory)问题常常会导致程序异常终止,而MAT就是解决这类...
10. **优化建议**:MAT不仅提供诊断工具,还提供了优化建议,如减少不必要的对象创建,改进数据结构设计等,以提高应用程序的性能和内存效率。 在使用MAT进行内存分析时,开发者需要注意正确配置JVM以生成heap ...
IBM内存分析工具(IBM Memory Analyzer,简称MAT)是一款强大的、免费的诊断工具,适用于所有Java虚拟机(JVM)。它能够提供详细的内存分配和引用路径信息,帮助开发者深入理解内存消耗情况,找出可能导致内存问题...
"Heap Dump的IBM分析工具.zip" 提供了一个专门用于解析和分析heap dump的IBM工具,帮助我们更好地理解JVM内存的状态。 Heap dump文件是Java虚拟机(JVM)在特定时间点生成的一种文件,它包含了JVM堆内存中的所有...
MAT,全称Memory Analyzer Tool,是IBM开发的一款强大的Java虚拟机(JVM)内存分析工具。它主要用于诊断Java应用程序的内存泄漏问题,帮助开发者理解内存消耗情况,优化内存配置,从而提升应用性能。MAT以其易用性和...
"IBMjvm内存分析工具"是一个专门针对IBM JVM设计的工具,旨在帮助开发者和运维人员有效地诊断和解决JVM内存泄漏或死锁等问题。 首先,我们来看"gc"这个标签,它代表了垃圾收集(Garbage Collection)。在Java中,...
IBM的Java核心(javacore)线程分析工具是一款强大的诊断工具,专为开发者和系统管理员设计,用于理解和解决IBM J9 Java虚拟机中的线程问题。它通过生成详细的线程快照,帮助用户深入洞察应用程序的运行状态,特别是...
IBM堆内存分析工具是针对Java应用程序进行性能优化和问题排查的重要辅助工具,它主要用于诊断IBM Java虚拟机(JVM)中的内存泄漏、过度分配等问题。IBM的这个工具,ha456.jar,可以帮助开发者深入理解应用程序在运行...
IBM HeapAnalyzer是一款强大的Java虚拟机(JVM)内存分析工具,专门用于诊断和解决Java应用程序中的内存溢出问题,即`OutOfMemoryError`。在Java应用程序运行过程中,如果分配的内存不足以存储数据,就会出现内存...
"Jvm堆栈dump文件分析"是指通过特定工具对这些dump文件进行解析,以便诊断和解决问题。 IBM提供了一款名为HeadAnalyzer的工具,版本4.1.4,专门用于分析Java堆栈信息,尤其适用于WebSphere应用服务器环境。...
IBM堆转储(heapdump)分析工具是一种专门用于解析和诊断IBM Java虚拟机(JVM)内存状况的工具。在Java应用程序运行过程中,如果遇到内存溢出或性能问题,IBM JVM会产生heapdump文件,其中包含了应用程序运行时内存...