1: 线上发生几次Full GC, 一直关注中:
1):YGC几本没有作用(正常的一次YGC会让EU减少, S0U,S01 中的一个清零,另一个变为非零), S0U1, S1U 都还是零的状态。
2): 可以看出老年代堆已经几乎满了,即使发生一个Full GC内存也没有释放多少。
3):可以判断基本上是发生了内存泄露
2: 导出内存信息
现网生成直方图可以用命令: 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 的代码
原文:https://www.cnblogs.com/liujianping/p/14784846.html