MAT全称为Memory Analzyer Tool,即一个Java Heaper分析器,可以用来分析内存泄露和减少内存消耗,它是eclipse的一个插件,可独立运行,具体分析步骤:
1. 工具下载,下载地址:https://www.eclipse.org/mat/downloads.php;根据不同的操作系统选择不同的版本下载安装;
2. 打印dump日志信息:使用jmap命令打印dump日志,命令参数及格式如下:
jmap -dump:format=b,file=heap.bin <pid>
format参数为文件格式,此处b表示为二进制;file为文件名称,pid为当前jvm进程号;
在自动部署系统中可以用过“JVM统计监测工具”打印dump日志;
1. MAT参数调整:jmap-dump命令产生的二进制文件大小与系统JVM的堆内存配置有关,一般生产环境上的堆内存-xms、-xmx等参数设置比较大,如2G/4G/8G不等,所以在利用MAT打开jmap文件时也需要很大的内存空间,可以修改安装目录下的MemoryAnalyzer.ini配置文件中的-xmx来进行调整;
一般改配置文件格式如下:
-startup
plugins/org.eclipse.equinox.launcher_1.3.0.v20140415-2008.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.200.v20140603-1326
-vmargs
-Xmx5500m
如果MAT内存不足,在打开jmap文件时会报错,具体信息为:
An internal erroroccurred during: "Parsing heap dump from “\*\*\*.log”Java heap space
1. 日志文件分析:打开MAT,点击界面左上角的“File à Open Heap Dump”,选择二进制dump日志,点击确认后开始进行分析,这个过程可能比较慢,在2G的堆内存配置下,大概需要2~3分钟,待分析完之后会生成很多临时文件,具体情况见下图:
一般如果出现内存泄露,MAT会给出相应的“LeakSuspects”,可以选择“Leaks”查看具体的内存泄露点,新窗口“leakhunter”下包括Overview、Problem Suspect1等,其中Problem Suspect1~N表示可能存在的几个内存泄露点;
参考文章:http://wensong.iteye.com/blog/1986449
http://blog.csdn.net/aaa2832/article/details/19419679
http://docs.oracle.com/javase/7/docs/technotes/tools/share/jmap.html