MAT使用指南
前言:将MAT常用的使用方法记录下来以备不时之需,后续补充也在这上面进行
MAT使用过程中常见问题
- JDK版本不匹配
目前MAT版本为1.16.0,需要JDK17以上版版本,如果要使用JDK8作为运行时环境需要下载1.7.0版本
R_1.7.0 - 运行目标版本不一致
如果MAT的运行版本和目标版本不一致,会导致无法打开dump文件,需要在MAT的安装目录下找到MemoryAnalyzer.ini
文件,修改如下:
需要注意的是必须将-vm {#你的jdk路径#}\jdk-21.0.2\bin\javaw.exe
-vm
配置放到-vmargs
之前,否则会导致MAT无法启动 - 运行时内存不足
如果在使用MAT的过程中出现了java.lang.OutOfMemoryError: Java heap space
的错误,可以在MemoryAnalyzer.ini
中添加如下配置:
其中-Xms512m -Xmx2048m
-Xms
表示初始内存大小,-Xmx
表示最大内存大小,可以根据自己的机器配置进行调整,注意MAT的内存大小一般设置为hprf文件的两倍
MAT常用功能
Histogram
直方图:用于分析对象的数量和大小
!(MAT_Histogram](https://github.com/agmtopy/noteBook/blob/master/png/j-jvm/MAT_Histogram.png?raw=true)
从上图中可以看到Object的数量和大小,shallow Heap表示对象本身占用的内存,retained Heap表示对象引用的内存,可以通过右键点击show object by class进行查看;
dominator tree
支配树:用于分析对象的引用关系和占用大小
dominator tree是MAT中最常用的功能,通过它可以很明显的分析出当前内存的占用情况,并且可以按照class,package,ClassLoad等进行分类;
-
分组功能:
-
GC Root引用功能:
-
调用链功能:
Leak Suspects by Snapshot Comparison
疑似内存泄漏视图:通过这个视图可以快速分析内存泄漏问题
调整内存显示单位: