mat用小内存解析超大堆快照的可行方法

mat用小内存解析超大堆快照的可行方法

·

1 min read

写在前面的话1:服务器上的堆大小已经远超过我开发机的内存大小了,如果直接使用mat客户端来分析很快就会出现OOM的问题,这篇博客一定程度上可以解决这个问题
写在前面的话2:大部分同学一直都在使用mat的gui来做分析,但其实mat的gui只是增加来一个html预览功能,我们可以利用mat命令直接生成html,甚至我们还可以挂载成在线服务,以供其他人浏览,非常赞

命令

/Applications/mat.app/Contents/Eclipse/ParseHeapDump.sh ~/Downloads/java_pidxxx.hprof org.eclipse.mat.api:suspects
/Applications/mat.app/Contents/Eclipse/ParseHeapDump.sh ~/Downloads/java_pidxxx.hprof org.eclipse.mat.api:overview
/Applications/mat.app/Contents/Eclipse/ParseHeapDump.sh ~/Downloads/java_pidxxx.hprof org.eclipse.mat.api:top_components

这个是基于macOS客户端来使用的,其他平台的mat命令位置得对应修改一下,当然如果你觉得分三次解析比较麻烦,你也可以直接一行完成

/Applications/mat.app/Contents/Eclipse/ParseHeapDump.sh ~/Downloads/java_pidxxx.hprof org.eclipse.mat.api:suspects org.eclipse.mat.api:overview org.eclipse.mat.api:top_components

从我实际的使用体验来说,建议是分开解析,其实很多时候你只需要一个suspects视图就足够了。

你需要注意的是mat在第一次解析的时候会生成很多的index索引类的文件,你得保证你的硬盘空间足够保存这部分的文件。 但mat完成以后,其实就是生成了多个html文件,你可以选择借助于nginx,挂载为在线地址,以供其他人在线预览,实际体验还是很不错的。