【现象】Tomcat日志报:java.lang.Exception: java.lang.OutOfMemoryError: GC overhead limit exceeded
【解决方法】通过MAT分析dump文件
1、jmap生成dump文件
jmap -dump:live,file=dump.hprof 267596
2、MAT分析dump文件
dump出来的文件有8个多G,由于本人的windows机器只有4G内存,在windows上加载dump文件会报错。要分析dump文件需要一台内存大于dump文件大小的机器。找到一台内存大于8G的linux机器,在linux进行dump文件分析。
- 下载MemoryAnalyzer-1.9.0.20190605-linux.gtk.x86_64.zip
- unzip MemoryAnalyzer-1.9.0.20190605-linux.gtk.x86_64.zip #解压
- vim MemoryAnalyzer.ini #修改配置文件
-Xmx10240m #由dump文件大小决定
- ./ParseHeapDump.sh dump.hprof org.eclipse.mat.api:suspects org.eclipse.mat.api:overview org.eclipse.mat.api:top_components
8G的dump文件分析起来还是需要很久时间的
3、 查看生成的报告
查看报告有两种方式,浏览器方式、eclipse方式。
- 浏览器方式
将dump_Leak_Suspects.zip文件拷贝出来,解压,点击页面浏览。只能看个大概,无法跳转进一步分析。