只需4个步骤,分析解决在生产环境下JVM内存泄露问题

作者:未完成交响曲

创新互联2013年至今,先为善左等服务建站,善左等地企业,进行企业商务咨询服务。为善左企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。

发现异常

首先通过我们内部搭建的日志平台发现我们线上环境一个java应用有大量的http接口请求超时,登录linux服务器查看网络环境没有问题,判断是应用自身运行异常,重启应用后发现异常还在,开始查找问题。

初步查找问题

通过指令:jstat -gcutil 查看jvm内存占用和gc情况:
只需4个步骤,分析解决在生产环境下JVM内存泄露问题

发现老年代内存占用比例过高,并且每次fullGC后并没有有效回收。老年代内存占用百分比变化趋势大致如下:
只需4个步骤,分析解决在生产环境下JVM内存泄露问题

初步判断大量请求超时和服务瘫痪的直接原因:
每次fullGC后的内存占用越来越高
内存占用增长速度越来越快
fullGC的频率越来越高
最终占用达到100%,服务完全瘫痪

分析处理

使用指令:jmap -histo:live *** | more 查看堆内存中的对象数量和大小只需4个步骤,分析解决在生产环境下JVM内存泄露问题

发现Log4jLogEvent这个对象实例很多,占用内存也异常的大,初步分析是异步日志传输速度跟不上,导致日志对象堆积在内存中。
尝试使用调整Flume传输日志参数:提高flume单次传输量,减少最大延迟时间
重启应用并监控接口调用情况发现应用暂时恢复正常了。

后续分析

在前一步分析内存的同时,使用指令:jmap -dump:format=b,file=heapDump.hprof将实时内存信息导出(dump过程比较慢,所以在问题暂时处理完后进行后续分析),使用mat分析内存结构:只需4个步骤,分析解决在生产环境下JVM内存泄露问题

可以看到主要占据堆内存的对象信息,果然是Flume异步传输日志堵塞的问题。
只需4个步骤,分析解决在生产环境下JVM内存泄露问题

总结

对jvm内存泄露这类问题的解决,主要是要善于利用jvm提供的类似jstat、jmap等工具来分析查找问题。这次问题虽然解决,但是后续还是存在出现此类问题的风险。所以除了加强jvm问题排查能力的同时,我们也将建立应用监控平台的计划提上日程,希望能对jvm内存、线程等应用实时运行指标进行监控,便于尽早发现问题。

欢迎大家一起交流,喜欢文章记得点个赞哟,感谢支持!


当前文章:只需4个步骤,分析解决在生产环境下JVM内存泄露问题
标题URL:http://hxwzsj.com/article/jdhhsc.html

其他资讯

Copyright © 2025 青羊区翔捷宏鑫字牌设计制作工作室(个体工商户) All Rights Reserved 蜀ICP备2025123194号-14
友情链接: 成都商城网站建设 营销型网站建设 定制网站建设多少钱 阿坝网站设计 重庆网站建设 成都商城网站制作 上市集团网站建设 高端网站建设 成都网站制作公司 成都网站制作 手机网站制作 网站设计制作 公司网站建设 网站建设公司 app网站建设 品牌网站建设 成都定制网站建设 网站制作报价 网站建设方案 网站制作公司 成都网站建设公司 成都网站建设