Widows 分析dump文件的工具太多了,而且都是傻瓜式的点点就好了。但是生产上分析dump文件的话,还是linux工具比较方便,因为生产上的dump文件一般都至少是GB级别的,这么大的文件拷贝到本机要耗费很长时间,特别是遇到生产事故的时候,时间=金钱。 更不允许我们把宝贵的拍错时间浪费到网络传输上面。
那么linux有什么好的解析dump工具呢? 如何解析 java dump的文件? 这里比较推荐IBM的eclipse的MAT工具。
运行环境要求
- linux操作系统
- JDK8 以上
下载MAT的linux版本
Eclipse的MAT工具下载链接
http://www.eclipse.org/mat/downloads.php
MAT支持各种操作系统,找到Linux版本下载下来
1 | # 运行uname -m 看一下linux是 x86_64还是 x86的帮助你选择下载那个版本。 |
解压配置MAT基本参数
1 | unzip MemoryAnalyzer-1.8.0.20180604-linux.gtk.x86_64.zip |
jmap dump整个堆
想了解更详细的请看这篇博文 望闻问切使用jstack和jmap剖析java进程各种疑难杂症
http://moheqionglin.com/site/blogs/24/detail.html
1 | jmap -dump:format=b,file=jmap.info PID |
MAT分析 dump
1 | ./ParseHeapDump.sh jmap.info org.eclipse.mat.api:suspects org.eclipse.mat.api:overview org.eclipse.mat.api:top_components |
等待结果….
结果会生产如下三个zip文件,很小可以直接拷贝到本机
- jmap_Leak_Suspects.zip
- jmap_System_Overview.zip
- jmap_Top_Components.zip
查看报告结果
有两种查看报告的方法
- 直接把zip下载到本地,然后解压用浏览器查看index.html
- 把zip下载到本地, 用MAT可视化工具解析zip
leak_suuspects
- Accumulated Objects in Dominator Tree(以当前问题对象为根的Dominator支配树)
- Accumulated Objects by Class in Dominator Tree(以当前问题对象为根的Dominator支配树 按类的维度分类统计)
遇到问题
Unable to initialize GTK+
遇到这个问题的话,是因为ParseHeapDump.sh
里面需要调用GTK的一些东西。解决方法:
1 | vi ParseHeapDump.sh |
然后继续运行
1 | ./ParseHeapDump.sh jmap.info org.eclipse.mat.api:suspects org.eclipse.mat.api:overview org.eclipse.mat.api:top_components |
问题解决
MAC 如何使用 mat工具
下载加压缩以后
1 | #修改内存大小,默认1G不够用 |
运行
1 | sudo mat.app/Contents/MacOS/MemoryAnalyzer |
原网址
http://moheqionglin.com/site/blogs/84/detail.html