首页 > 编程语言 > 详细

记一次JAVA FULL GC问题处理【2】

时间:2021-05-19 23:59:17      阅读:44      评论:0      收藏:0      [点我收藏+]

1: 线上发生几次Full GC, 一直关注中:

1):YGC几本没有作用(正常的一次YGC会让EU减少, S0U,S01 中的一个清零,另一个变为非零), S0U1, S1U 都还是零的状态。

 2): 可以看出老年代堆已经几乎满了,即使发生一个Full GC内存也没有释放多少。 

 3):可以判断基本上是发生了内存泄露

技术分享图片

 

 

 2:  导出内存信息 

jmap -dump:format=b,file=heap.binnew 8 
 
3:于是使用工具jvisualvm 工具查看, 可看查到如下的直方图:
技术分享图片

 

现网生成直方图可以用命令: jmap -histo 8 发现内存中,确实存在一些不应该存在的对象。工具不怎么强大, 没有分析出有效的结论。

 

4: MemoryAnalyzer 工具查看,MAT工具有支配树(dominator_tree) 这个视图,这个视图可以看出那个对象所持有的关联对象最大。 

技术分享图片

 

 5: 从服务上看,内存占用最多的是tomcat处理请求线程占用最多。

 里面有较多的ThreadLocalMap 对像。第一个是最大的对象为StringBuilder 。 

 

6: 从支配树并不能直接看出问题的所在,这里从StringBuilder对象的内容查问题,内容有如下特点。

1): 发现里面的内容主要为日志内容。

2): 日志的长度较大,都是200-20M大小。支配树显示大的小,就已经可以打内存爆满。

3):日志内容,不是一次的,是多次日志,而且日志关联性不大。

4)   进一步查询日志还发现,后面的日志的前面部分不全。

 

技术分享图片

 

技术分享图片

技术分享图片

 

 7:现清这这个问题,我们回过头来看代码在log4j 2.6.0 的代码

 

 

 

 
 
 
 

记一次JAVA FULL GC问题处理【2】

原文:https://www.cnblogs.com/liujianping/p/14784846.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!