首先打开官网下载工具
Eclipse Memory Analyzer Open Source Project | The Eclipse Foundation
如果是linux上的使用
下载linux的MAT版本解压后
该版本需要jdk11以上才可以运行
所以 先下载jdk 然后解压 Archived OpenJDK GA Releases
修改MemoryAnalyzer.ini 添加-vm指定jdk环境
-startup
plugins/org.eclipse.equinox.launcher_1.6.200.v20210416-2027.jar
-vm
/root/jdk-11/bin/java
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.2.200.v20210429-1609
-vmargs
-Xmx4024m
执行, ./ParseHeapDump.sh gpl-dump.hprof^Corg.eclipse.mat.api:suspects org.eclipse.mat.api:overview org.eclipse.mat.api:top_components
等待一会儿执行完成会生成 三个zip的分析文件
把这个三个zipi文件可以分别解压放到nginx的上进行访问,或者copy出来放到window上直接打开index.html
window环境下下载的win的包,以下是win环境下的使用
下载成功解压后
运行MemoryAnalyzer.exe发现报错
需要使用jdk11以上的版本。
下载jdk11
下载成功后,可是我并不想替换原来系统中的jdk8的环境,所以,此时可在MemoryAnalyzer.ini中配置vm的运行环境,-vm下内容为 下载的jdk11后解压后的bin目录javaw.exe
再次运行 MemoryAnalyzer.exe
可以加载一个本地dump堆栈的文件进行分析。
加载堆栈文件后的Overview
此时可以看到 大对象占用的内存空间,以及饼状图左下角哪个线程运行的时候产生的
此时可以点击 Leak_Suspects 进一步查看详细分析信息
这里基本可以分析出某个类某个方法调用会产生大量对象
点击detail可以查看具体哪些对象占用大量空间
list中装载的大量的LinkedHashmap占用大量空间