WebSphere应用服务器内存泄漏探测与诊断工具选择最佳实践


WebSphere应用服务器内存泄漏探测与诊断工具选择最佳实践

 

李 学朝 ( lixuec@cn.ibm.com ), 高级软件工程师,IBM中国软件开发中心 李学朝,IBM中国软件开发中心高级软件工程师,目前的工作重 点在于应用解决方案的性能测试和调优,曾任WebSphere应用服务器性能监控工具的系统测试策略家(strategist)。主要兴趣包括中间件,系 统性能监控和调优,JEE、SOA,软件自动化和供应(Automation and Provisioning)等。

引言

内存泄漏是比较常见的一种应用程序性能问题,一旦发生,则系统的可用内存和性能持续下降;最终将导致内存不足(OutOfMemory),系统彻底 宕掉,不能响应任何请求,其危害相当严重。同时,Java堆(Heap)中大量的对象以及对象间之复杂关系,导致内存泄漏问题的探测和分析均比较困难,采 用相应的辅助工具是很必要的。

WebSphere应用服务器提供了系列针对内存问题的探测和分析诊断工具,这些工具可以帮助用户进行内存问题的及时探测,保证系统在发生OOM之 前,用户可以在无须进行复杂分析的条件下,预知在其部署的应用中是否存在内存泄漏的问题。如果确有内存泄漏现象发生,WebSphere还提供了相应的工 具,可以帮助用户进行分析诊断,从而找到内存泄漏的真正原因。


回页首

1. 内存泄漏探测和诊断步骤

实践中,我们可以采用以下的步骤来处理内存泄漏的问题:

(5)在其他属性区域,点击性能和诊断建议配置,确保内存泄漏规则处于运行状态(绿色箭头)。


回页首

3. Java 虚拟机概要分析和详细垃圾回收

进一步检测是否有内存泄漏的发生,以及泄漏发生的时间,周期和速度,我们可以启用Java虚拟机中的详细垃圾回收,然后分析相应的日志。 WebSphere应用服务器6.1使用了Java SDK5.0, 在Window, Linux, AIX, i5/OS,z/Linux 和z/OS上使用了IBM的JAVA虚拟机, 在Solaris和HP-UX上使用Sun的JVM。Java 虚拟机概要分析工具接口(Java Virtual Machine Tool Interface,JVMTI)支持从运行应用程序服务器的 Java 虚拟机(JVM)收集信息(如,关于垃圾回收的数据、对象利用和线程状态)并且支持更全面的性能分析。一旦启用了 JVMTI,可以使用 PMI 定制选项来启用所选统计信息以收集特定数据。

3.1启用 Java 虚拟机概要分析和详细垃圾回收配置步骤

配置步骤:

1. 在控制台导航树中单击服务器 > 应用程序服务器

2. 单击选择所需应用程序服务器。

3. 在”服务器基础结构”下,单击 Java 和进程管理-> 进程定义。

4. 在”其他属性”下,单击 Java 虚拟机。

5. 选中配置Tab的详细垃圾回收选项。

6. 在通用 JVM 参数字段中输入 -agentlib:pmiJvmtiProfiler。

注: WebSphere6.1中,JVM概要分析接口改为Java Virtual Machine Tool Interface (JVMTI)。之前版本是JVMPI。如果需要JVMPI的时候,也可以此处输入-XrunpmiJvmpiProfiler。另外,启用JVMTI接 口对性能影响较大,尽量避免在生产环境中使用。

PMAT在分析GC日志后,给出一个总结。下图为例,我们可以看出GC对系统性能的影响,以及完成的垃圾回收次数等,并且我们可以看出工具给出的推 荐(Recommendations)显示系统的Java堆使用情况是持续增加的。

5.保存并重启WebSphere服务器。

4.3 TPV的使用方法

实时查看 TPV 性能模块的步骤:

(1) 在控制台导航树中,单击监控和调整 -> 性能查看器 -> 当前活动 -> 服务器名字)-> 性能模块。

(2) 选中要查看的每个性能模块,例如JVM运行时。

(3) 单击查看模块按钮。 在页面的右侧会显示所选性能数据的图形或切换成表格。 注:每个模块有与其关联的多个计数器。这些计数器会显示在数据图形或表格下面的表中。您可以通过选择或取消选择计数器旁的复选框,将计数器添加到图表或表 中,或从中除去。

TPV显示的已使用内存的图形理想情况下应该是锯齿状,图形中每个坡(下降)对应着一次内存的垃圾回收(Garbage collection),如下图已使用内存的曲线,显示的是没有发生内存泄漏的状况。

上图,红色曲线代表已使用的内存,从整体趋势,我们可以看出已使用内存一直在增长。 TPV可以帮助发现内存泄漏,为了得到最优结果,我们可以重复试验,而且每次可以增加测试的时间,例如测试1000,3000或5000个页面请求。


回页首

5. 生成Heap dump文件

在使用IBM SDK的平台上,例如AIX, Linux和Windows,在启用了性能诊断顾问工具后,如果探测到有内存泄漏发生,WebSphere会自动生成两个heapdump文件,供后续分 析使用。

我们在任何时候,可以随时手动生成所需的heap dump文件。在WAS6.1 profile的bin目录下,首先运行wsadmin 脚本客户端,然后可以调用generateHeapDump操作来完成。

关键步骤:

1. 找到JVM对象名字。

 

 

2. 对JVM MBean调用generateHeapDump操作。

 

 

例如:

 

 

理想情况下,在探测到问题时,尽快生成一个初始的heap dump,然后密切监控内存使用情况,等到泄漏了足够的内存的时候,再生成另外一个heap dump,这样可以对比分析以更准确地找到泄漏的原因。

注: 生成HeapDump文件的过程是比较耗资源的,所以请只在必须的时候做这样的操作。


回页首

6内存泄漏的分析诊断工具-MDD4J

一旦确定了系统中有内存泄漏,并且为此生成了heap dump。接下来,我们可以把这些文件从WebSphere应用服务器转移到离线的分析工具所在的机器,进行离线分析诊断。

6.1 工具介绍

MDD4J(Memory Dump Diagnostic for Java)是一个内存泄漏分析工具,用于对运行 WebSphere Application Server 的虚拟机(JVM)所生成的常用内存转储(堆转储)格式进行分析。进行内存转储(Memory dump)分析的目的,是为了确定 Java 堆中真正导致内存泄漏的类和包(classes and packages),这样可以缩小内存泄漏的范围并找到真正的原因,此分析还确定应用程序 Java 堆占用量的主要组成部分以及它们之间的拥有关系。

此工具支持下列格式的内存转储格式有:

-IBM 的PHD格式(heapdump.phd)

-IBM 文本堆转储(heapdump.txt)

-HPROF 堆转储格式(hprof.txt,主要针对Solaris和HP-UX平台)

-SVC 转储(dump.bin,IBM z-Series上的WebSphere)

该工具提供了两种分析机制:单转储分析以及对两个转储进行的比较分析。

单转储分析最常用于在发生 OutOfMemoryException 时自动触发的内存转储。此类分析查找可疑的数据结构,能够相对快速地提供可疑泄漏对象的分析结果。

比较分析用于对运行内存泄漏应用程序期间(即可用 Java 堆内存流失时)获取的两个内存转储进行分析。在运行泄漏应用程序的早期触发的内存转储被称为基线内存转储,发生泄漏的应用程序运行一段时间(以允许泄漏程 度加大)后触发的内存转储被称为主内存转储。在发生了内存泄漏的情况下,主内存转储可能包含大量对象,而这些对象占用的 Java 堆空间量会比基线内存转储大很多。

为了获得更好的分析结果,建议使主内存转储的触发点与基线内存转储的触发点在时间上拉开一定距离,从而使总耗用堆大小在两个触发点之间大幅增长。

MDD4J的分析结果显示是基于Web界面的,具有下列特征:

– 列示分析结果、堆内容、大小和增长幅度的总结

– 列示可疑的数据结构、数据类型和包,它们是造成堆使用量增加(对于比较分析)和堆大小较大(对于单转储分析)的主要原因。

– 拥有关系上下文视图显示了占用量主要组成部分之间的关系,以及一组汇总的主要占用量组成部分所包含的重要数据类型。

– 在堆转储内容的交互式树形视图中,浏览功能能够显示堆中任何对象的所有进入引用(在树中只显示一个引用,其余引用单独显示)和外出引用,而子对象按到达大 小排序。

– 导航功能使您能够从可疑对象列表转到所有关系上下文,以及从内容视图转到浏览视图。

– 提供了内存转储中所有对象和数据类型的表视图,视图中具有过滤器和经过排序的列。

6.2工具的使用

WebSphere 应用服务器v6.1的附带光盘里面有IBM Support Assistant工具的安装文件,运行相应的安装文件,MDD4J作为插件同时被安装了。

另外,也可以从IBM 技术支持站点http://www-306.ibm.com/software/support/isa/ 下载Support Assistant工具,然后选择更新程序,独立安装MDD4J插件。

启动步骤:

(1) 程序->IBM Support Assitant ->IBM Support Assistant v3

(2) 在Support Assistant窗口中,选择工具 -> 选择WebSphere版本 。

查看分析进度

单击”上载并分析”按钮后,MDD4J开始分析heap dump文件。在分析执行过程中,登录页面将自动刷新,以反映当前正在执行的分析步骤以及整体分析进度。如果该页面由于某种原因而不刷新,您可以单击”刷 新”按钮以了解当前分析状态。如果您希望停止分析,可以单击”停止”按钮,这将在当前正在执行的模块完成后终止分析。

在提交了heap dump文件,MDD4J显示分析状态。

WebSphere应用服务器内存泄漏探测与诊断工具选择最佳实践

查看分析结果

分析完成后,Mdd4J页面将重定向到”分析结果”页面。”分析结果”页面包含 4 个选项卡:

“分析总结”选项卡:显示分析结果总结,并列示下一组用于查看分析结果的步骤。

“可疑对象”选项卡:它显示四类可疑对象,即对增长幅度影响最大的数据结构、到达大小显著流失的数据结构、有大量实例的对象类型以及有大量对象实例 的 Java 包。

“察看上下文和内容”选项卡:显示主内存转储中 Java 堆占用量的主要组成部分的拥有关系上下文图,以及图中所选节点的内容。

“浏览”选项卡:根据对对象引用图执行的深度优先遍历,用树形视图显示主内存转储的所有内容。

其他内容,请参照MDD4J工具附带的Help文档,该帮助文档有详细的使用说明,在此不再赘述。

文章知识点与官方知识档案匹配,可进一步学习相关知识Java技能树首页概览91438 人正在系统学习中 相关资源:最强劲的加密软件TrueCrypt_Setup_7.1a_最强劲的越野车- 络攻防…

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2011年2月2日
下一篇 2011年2月2日

相关推荐