内存分析工具mat的安装和使用(full GC 排查方法)

本文介绍了如何使用EclipseMemoryAnalyzer(MAT)工具进行内存分析。首先,通过调整MemoryAnalyzer.ini文件以适配JDK11解决启动问题。接着,通过jps和jmap命令生成和导出dump文件。然后,在MAT中导入dump文件,查看内存占用情况,利用Histogram、DominatorTree和ThreadOverview来识别内存泄漏和线程问题。最后,建议针对业务代码优化以减少FullGC的发生。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、安装

下载地址:Eclipse Memory Analyzer Open Source Project | The Eclipse Foundationhttps://www.eclipse.org/mat/downloads.php

 下载后解压,点击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文件

jmap -dump:format=b,file=testFile.dump 16868   // 16868  是java的进程id

 将生成好的testFile.dump文件导出到桌面

sz 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有很多种原因,结合自己程序问题解决即可

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值