WebSphere应用服务器内存泄漏探测与诊断工具选择最佳实践
<!--START RESERVED FOR FUTURE USE INCLUDE FILES--><!-- include java script once we verify teams wants to use this and it will work on dbcs and cyrillic characters --><!--END RESERVED FOR FUTURE USE INCLUDE FILES-->自:http://blog.chinaunix.net/u1/57765/showart_450998.html
?
本文介绍了如何在WebSphere应用服务器中实现应用程序内存泄漏的探测,并且针对IBM所提供的系列分析与诊断工具,给出了具体的配置步骤和使用最佳实践。
(1) 首先,在WebSphere中我们启用实时探测内存泄漏工具, WebSphere性能诊断顾问会对内存泄漏提前发出警告信息。
(2) 启用WebSphere自带的Tivoli性能查看器监视系统的JVM使用状况,确定内存泄漏是否正在发生。
(3) 根据需要,生成详细内存回收日志,使用PMAT工具分析并确定泄漏的时间,周期等。
(4) 生成单个或者多个Heapdump文件,选用MDD4J进行分析诊断,找到内存泄漏的真正原因。
(5) 提交开发部门进行代码修复,然后重新部署到WebSphere应用服务器。
接下来的部分,我们针对每个环节的配置和工具使用进行阐述。
(5)在其他属性区域,点击性能和诊断建议配置,确保内存泄漏规则处于运行状态(绿色箭头)。
7.点击应用或者确定。
8. 单击保存按钮。
9.重启WebSphere应用服务器。
PMAT在分析GC日志后,给出一个总结。下图为例,我们可以看出GC对系统性能的影响,以及完成的垃圾回收次数等,并且我们可以看出工具给出的推荐(Recommendations)显示系统的Java堆使用情况是持续增加的。
进一步,我们可以查看GC的详情,点击Analysis菜单,然后选择Graph View All,我们就可以根据需要选择所要查看的曲线。如图所示,红色曲线代表已使用内存,蓝色曲线代表每次垃圾回收后可用的内存。已使用内存逐渐增加,可用内存的持续降低表明系统可能存在内存泄漏。
5.保存并重启WebSphere服务器。
如果测试过程中出现如下情况,则有可能发生了内存泄漏:
-每次垃圾回收后的已使用内存的数值骤增。
-TPV对应的已使用内存图形更接近于阶梯(staircase),或者锯齿形状严重不规则。
-也可以查看分配的对象数与释放的对象数之差值,如果这个数值越来越大,则有内存泄漏(如果需要查看对象数,需要启用JVMTI接口并在PMI中启用相应的JVM计数器)。
上图,红色曲线代表已使用的内存,从整体趋势,我们可以看出已使用内存一直在增长。 TPV可以帮助发现内存泄漏,为了得到最优结果,我们可以重复试验,而且每次可以增加测试的时间,例如测试1000,3000或5000个页面请求。
理想情况下,在探测到问题时,尽快生成一个初始的heap dump,然后密切监控内存使用情况,等到泄漏了足够的内存的时候,再生成另外一个heap dump,这样可以对比分析以更准确地找到泄漏的原因。
注: 生成HeapDump文件的过程是比较耗资源的,所以请只在必须的时候做这样的操作。
点击MDD4J的链接,就可以开启MDD4J工具。在该界面中,我们可以提交单个heap dump文件进行单转储分析,或同时提交两个文件进行比较分析。也可以从内存转储分析结果的下拉选项中选择以前的分析结果,从而查看以前的分析内容。
查看分析进度
单击"上载并分析"按钮后,MDD4J开始分析heap dump文件。在分析执行过程中,登录页面将自动刷新,以反映当前正在执行的分析步骤以及整体分析进度。如果该页面由于某种原因而不刷新,您可以单击"刷新"按钮以了解当前分析状态。如果您希望停止分析,可以单击"停止"按钮,这将在当前正在执行的模块完成后终止分析。
在提交了heap dump文件,MDD4J显示分析状态。
查看分析结果
分析完成后,Mdd4J页面将重定向到"分析结果"页面。"分析结果"页面包含 4 个选项卡:
"分析总结"选项卡:显示分析结果总结,并列示下一组用于查看分析结果的步骤。
"可疑对象"选项卡:它显示四类可疑对象,即对增长幅度影响最大的数据结构、到达大小显著流失的数据结构、有大量实例的对象类型以及有大量对象实例的 Java 包。
"察看上下文和内容"选项卡:显示主内存转储中 Java 堆占用量的主要组成部分的拥有关系上下文图,以及图中所选节点的内容。
"浏览"选项卡:根据对对象引用图执行的深度优先遍历,用树形视图显示主内存转储的所有内容。
其他内容,请参照MDD4J工具附带的Help文档,该帮助文档有详细的使用说明,在此不再赘述。
7.小结
IBM提供了一系列的工具辅助用户进行内存问题的监控和分析,在合适的阶段选择合理的工具可以帮助我们轻松搞定内存泄漏。这里介绍的工具都是 WebSphere附带或者免费的,IBM Tivoli工具还提供了更强大的监控和诊断功能,例如ITCAM (IBM Tivoli Composite Application Management),可以根据实际情况选用。
参考资料
本文转载于IBM官方网站:
http://www.ibm.com/developerworks/cn/websphere/library/techarticles/0609_xuechao/index.html