利用MAT来剖析生产数以亿计的工具堆转储文件,快速打算存活工具的大小,创造谁在阻碍GC回收工具,形成一个报告来自动提取内存泄露嫌疑工具。
翻译的磕磕巴巴,英文不差的同学直接看英文吧~安装独立版本的MAT官网下载Memory Analyzer 1.9.0 Release,下载地址:
https://www.eclipse.org/mat/downloads.php

MAT官网下载
下载zip包解压后,即可双击运行运用程序,MAT欢迎页面:
MAT欢迎页
点击\"大众How to Get a Heap Dump\"大众,会打开一个本地的MAT文档:
MAT帮助文档
以上,Java Heap Dump剖析工具就安装好了,接下来要做的便是来本地创造一个dump文件,来试试这个工具如何利用。
本地获取Heap Dump文件写一个大略的类并运行来获取Heap Dump文件:
TestMemortLeak.java
配置一下启动参数:
-Xms128m -Xmx256m -XX:MaxPermSize=256m
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/Users/edz/testMemoryLeak
运行main方法会报错如下:
获取Heap Dump
Java Heap Dump文件已得手,开始剖析!
MAT打开本地dump文件,选择Leak Suspects Report:
Leak Suspects Report
dump文件剖析结果总览
大家看到上面的图是不是基本上就可以瞥见问题点了?已经明确的见告你问题嫌疑点:(a)235.6M,把配置的启动参数等分配的内存吃没了。
点击黄色区域\"大众See stacktrace\公众查看堆栈信息:
stacktrace
急速便能定位程序中内存泄露的问题代码了。
以上只是实验阶段,那么在生产环境中当我们疑惑线上业务有内存泄露问题时候怎么办呢?还是须要拿到Java Heap Dump文件,但是这个时候把稳了,一定要保留现场的情形下去拿dump文件,否则重启了或者等Full GC了,现场就没有了。
接下来我们先容如何通过Jmap来获取Java Heap Dump文件。
jmap -h
jmap -h查看linux下jmap命令的用法,大家可以看看他的Usage和options先容以及如何利用,这里就不对每个参数进行详细先容了。先查看当前运行的java程序的进程Id:
jps、ps -ef|grep java、ps -ef|grep 项目名称 均可
然后获取转储文件:
jmap -dump:live,format=b,file=dump.phrof 31824
大家在利用上述命令时候一定要小心,如果做事器上的JVM heap过大,会造成运用“Stop the World”,建议利用参数的形式,在启动运用程序的时候就把参数带上,这样也会在内存溢出的时候,能够及时的保存线程dump文件。
把做事器上的dump.phrof文件下载到本地用MAT打开,开启你的剖析之路吧~
以上便是本次和大家一起学习的MAT剖析Java Heap Dump实践之旅了,希望对大家Java的学习发展之路有一定的帮助。我会持续剖析Java领域干系技能文章,欢迎大家留言、关注,一起互换学习,共同发展!