Java虚拟机

  • 一次Java虚拟机频繁GC问题排查

    一天早上刚上班不久,客户开始反馈网站运行缓慢。然后,赶紧,查看了下应用的监控,然后发现应用在频繁的进行Full GC,并且每次Full GC后,老年代的内存都没有下降。然后,立马重启应用,但是过了一会儿还是有出现了相同的问题。随后,让运维加了启动参数(-XX:+HeapDumpBeforeFullGC -XX:+HeapDumpAfterFullGC -XX:HeapDumpPath=e:\dump.log),在每次Full GC前都dump下内存。 随后拿了dump文件来分析,分析工具使用MAT,eclipse的一个插件。使用该插件打开dump文件后,选择Leak Suspects,最后发现有个对象MessageDetailDTO有15万多个,如下图: 通过以上两张图,定位到是在打日志的时候,将查询出的数据全部通过fastjson打印出日志了,造成内存占用过多,而且该数据查询很频繁,每次返回的都是好几万条,到这里问题就已经找到了,需要修复了。 将查询修改为分页查询,每次只查询1500条,并且日志中不在将这些查询出的数据打印出来。修复好之后,立马上线,观察情况,通过好几天的连续观察,没有再发生过一次Full GC,效果明显。 如果我们发现应用有内存溢出,或者频繁Full GC的情况下,还是需要去分析dump文件。

    2019年8月31日 0 35 0