教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 高等教育 >

java内存泄露定位与分析 - 图文(2)

来源:网络收集 时间:2026-05-20
导读: 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 Se

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 对垃圾回收状态的分析数据

图 6. jca 对垃圾线程状态的分析数据

问题核实后,如何进行解决呢?分析结果中也给出了相应的建议,从图 4 的 Recommended 小节我们可以看到:

Recommended -Xmxcl setting (only for IBM Java 5.0, up to and including Service Refresh 4 (build date:February 1st ,2007)) : 10,649 or greater。

为了考虑到对既有旧系统不产生影响,我们没有对 JRE 进行升级,而是采用了分析结果给出的建议,在应用服务器启动后设置 -Xmxcl 参数为 25000,为验证我们的修改是不是成功解决掉了 OOM 宕机的问题,笔者取消了对应用服务器的自动重启调度,通过一段时间的监控发现,系统运行良好,一直没有再出现 OOM 而宕机的问题,问题得以最终解决。

总结

1.

整体规划

系统上线前要做好充分的准备工作,这一点很重要,上线计划可不是拍拍脑门就能想出来的,需要很多项目成员的参与。

a.

项目实施计划书:要包括预计实施目标,双方的实施负责人(包括 backup),协调哪些资源应该找哪些人,详细的阶段性计划等等。 b.

实施小组:指定具有实施经验的架构师,系统工程师,开发组长组成实施小组,负责生产环境的搭建及调整。成员构成上一定要包含项目组内的稳定核心人员,以保证能在特殊情况需要时做 backup。核心人员的流动会引起项目风险,尤其是在上线初期的不稳定阶段。 c.

对可规划使用的资源一定要充分利用,这一点应包含在项目实施计划书内,尽量做到资源一步到位。因为本项目案例中,旧有系统和新系统并行运行,可用的资源在不断发生变化,期间为解决性能问题,曾尝试将资源分配向新系统倾斜,以尝试是否能解决问题,这在一定程度上也会影响实施的进度。 d. …… 此处隐藏:5字,全部文档内容请下载后查看。喜欢就下载吧 ……

java内存泄露定位与分析 - 图文(2).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/616003.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)