使用IBM性能分析工具解决生产环境中的性能问题 - 编程入门网
中找到蛛丝马迹,可是许久没有进展,再一次陷入了困境。
在多次研究 heapdump 文件无果的情况下,笔者开始逐渐将注意力转移到 javacore 文件上,虽然它比较小,说不定内藏玄机呢。通过多方搜寻,找到了 IBM Thread and Monitor Dump Analyzer for Java(以下简称 jca)—— A tool that allows identification of hangs, deadlocks, resource contention, and bottlenecks in Java threads。通过它自身的这段描述来看,这正是笔者所需要的好工具。 这个工具的使用和 HeapAnalyzer 一样,非常容易,同样提供了详细的 readme 文档,这里也简单举例如下: #/usr/java50/bin/java -Xmx1000m -jar jca37.jar 图 2. 通过 xManager 工具登录到 AIX 服务器上打开 jca 的效果图 笔者直接在生产环境下直接通过它对产生的 javacore 文件进行分析,令人惊喜的是,其分析结果非常明了,笔者心头的疑云在对结果进行进一步分析核实后也渐渐散去。 图 3. jca 对 javacore.20090602.134015.430370.txt 的分析结果 —— 第一部分 使用IBM性能分析工具解决生产环境中的性能问题(4)时间:2012-03-17 IBM 张永峰从图中,我们可以清楚地看到引发错误的原因 —— The failure was caused because the class loader limit was exceeded。同时我们还能看出当前生产环境使用的 JRE 版本是:J2RE 5.0 IBM J9 2.3 AIX ppc-32 build j9vmap3223-20070201 ,这个 SR4 的版本有个问题,我们可以从分析结果图的第二部分的 NOTE 小节清楚地看到: 图 4. jca 对 javacore.20090602.134015.430370.txt 的分析结果 —— 第二部分 NOTE: Only for Java 5.0 Service Refresh 4 (build date:February 1st, 2007) and older. When you use delegated class loaders, the JVM can create a large number of ClassLoader objects. On IBM Java 5.0 Service Refresh 4 and older, the number of class loaders that are permitted is limited to 8192 by default and an OutOfMemoryError exception is thrown when this limit is exceeded. Use the -Xmxcl parameter to increase the number of class loaders allowed to avoid this problem, for example to 25000, by setting -Xmxcl25000, until the problem is resolved. 原来,OOM 竟然是因为这个原因产生的。那么到底是哪里加载的对象超过了这个 8192 的限制呢?接下来笔者结合分析结果和应用系统 log 进行了进一步的分析,更加验证了 JCA 分析结果的正确性。 在分析结果中可以看到 Current Thread ,就是对应引起 OOM 的应用服务器的线程,使用该线程的名称作为关键字在我们的 log 里进行搜索,迅速定位到了业务点——这是一个定时的调度,其功能是按固定时间间隔以 DBLink 的方式从外部应用的数据库系统中抽取数据,通过应用层逻辑转换后保存到内网数据库系统中。应用层的逻辑是对所有的业务数据进行循环,对每条业务数据进行到 POJO 的一一对照转换,这意味这一条业务数据需要 10 几个 POJO 进行组合对照,也就是说,如果外网在指定的时间间隔内数据量稍大,就会加载大量的对象,使 JVM 的 class loaders 瞬间超过 8192 的限制,而产生 OOM 的错误,从而使内存不断被消耗,直至宕机。 jca 还提供了对垃圾回收和线程状态的详细分析数据,可以参考如下两图: 图 5. jca 对垃圾回收状态的分析数据 使用IBM性能分析工具解决生产环境中的性能问题(5)时间:2012-03-17 IBM 张永峰图 6. jca 对垃圾线程状态的分析数据 问题核实后,如何进行解决呢?分析结果中也给出了相应的建议,从图 4 的 Recommended 小节我们可以看到: |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |