MAT使用指南


MAT使用指南

前言:将MAT常用的使用方法记录下来以备不时之需,后续补充也在这上面进行

MAT使用过程中常见问题

  1. JDK版本不匹配
    目前MAT版本为1.16.0,需要JDK17以上版版本,如果要使用JDK8作为运行时环境需要下载1.7.0版本
    R_1.7.0
  2. 运行目标版本不一致
    MAT_启动问题
    如果MAT的运行版本和目标版本不一致,会导致无法打开dump文件,需要在MAT的安装目录下找到MemoryAnalyzer.ini文件,修改如下:
    -vm
    {#你的jdk路径#}\jdk-21.0.2\bin\javaw.exe
    需要注意的是必须将-vm配置放到-vmargs之前,否则会导致MAT无法启动
  3. 运行时内存不足
    如果在使用MAT的过程中出现了java.lang.OutOfMemoryError: Java heap space的错误,可以在MemoryAnalyzer.ini中添加如下配置:
    -Xms512m
    -Xmx2048m
    其中-Xms表示初始内存大小,-Xmx表示最大内存大小,可以根据自己的机器配置进行调整,注意MAT的内存大小一般设置为hprf文件的两倍

MAT常用功能

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进行查看;
MAT_Histogram_incomeing

dominator tree

支配树:用于分析对象的引用关系和占用大小
dominator tree
dominator tree是MAT中最常用的功能,通过它可以很明显的分析出当前内存的占用情况,并且可以按照class,package,ClassLoad等进行分类;

  • 分组功能:
    dominator tree1

  • GC Root引用功能:
    dominator tree2

  • 调用链功能:
    dominator tree3

Leak Suspects by Snapshot Comparison

疑似内存泄漏视图:通过这个视图可以快速分析内存泄漏问题
Leak Suspects

调整内存显示单位:
调整内存
调整内存2

参考资料

MAT项目地址


  TOC