1、安装
下载后解压,点击memoryanalyzer.exe进行启动
mat启动是需要jdk11或者更高的版本,我本地jdk版本是1.8,所以会报jdk版本不适合
解决方法:在memoryanalyzer.ini 中加入指定jdk的地址, (jdk不用安装直接下载 解压指定bin/javaw.exe就可)
-vm
d:/software/jdk-11.0.18_windows-x64_bin/jdk-11.0.18/bin/javaw.exe
2、导出dump文件
先进入服务器,使用jps命令查询运行中的java进程和进程id
生成dump文件
将生成好的testfile.dump文件导出到桌面
mat界面
导入dump文件
查看内存占用过大的指标
可以看到bytes占用内存的22.17%
点击mat的 histogram进行查询
objects 对象个数
shallow heap 浅堆内存(对象实际占用的内存数量)
retained heap 深堆内存(可释放内存,目前没有被回收占用的内存)
查看占用内存多大的对象被谁引用了,点击mat的dominator tree,用来分析对象的调用链
点击mat的thread_overview,线程简介图,这个里面有方法的调用链
分3个步骤分析即可
1、观察name、shallow heap 、retained heap指标,一般也是倒序排序
2、 查看占比最大两个即可,java.lang.thread @0xd9d01a20,可看到具体代码出现问题的行数以及对象引用链
3、查看线程详情,选中线程点击详情thread details查看具体发生的异常信息
结语
业务代码导致频繁full gc ,优化业务代码即可。发生full gc有很多种原因,结合自己程序问题解决即可
发表评论