MAT MemoryAnalyzer中文使用指南

由于前段时间生产遇到JVM问题,需要分析dump文件,如果对相关分析工具没有使用过的小伙伴来说可能懵圈,这里介绍一下MAT工具排查问题的使用方法;

1.MAT安装

没有安装过的小伙伴先点 这里 进行下载;解压之后包含以下文件:
在这里插入图片描述
打开MemoryAnalyzer.ini,修改JVM堆参数(注意:修改堆大小需要超过你分析的hprof 文件的大小,我这里做教程就定义为1024M):
在这里插入图片描述
配置完成后,点击MemoryAnalyzer.exe启动;

2.准备一份dump文件

在开始使用MAT分析dump文件之前,先制作一份OOM的dump文件;
启动IDEA/Eclipse,新建测试类:

public class DumpTest {
    List<byte[]> byteArrayList = new ArrayList();
    @Test
    public void testGenerateDump(){
        while(true){
            byteArrayList.add(new byte[4096]);
        }
    }
}

修改JVM参数:

-Xmx500M
-Xms500M
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=D:\test\dump\test.hprof

生成dump文件:
在这里插入图片描述

3.分析dump文件

将生成的test.hprof文件导入到MAT中:
在这里插入图片描述
导入后,强出上面的对话框:
Leak Suspects Report: 漏洞疑点报告,自动检查堆转储是否存在泄漏嫌疑,报告哪些对象被保存起来,为什么它们没有被垃圾收集;
Component Report: 元件报告,分析一组对象是否存在可疑的内存问题:重复的字符串、空集合、终结器、弱引用等
Re-open previously run reports: 打开以前的运行报告;

选择Leak Suspects Report,点击完成;
在这里插入图片描述
这里为我们生成了一份漏洞疑点报告;点击See stacktrace可以查看详细的栈信息:
在这里插入图片描述
从这里我们就可以确定问题所在处了,就是在testGenerateDump方法生成了大量Object[];

4.其它功能

在这里插入图片描述
分析dump文件会生成这么多的分析报告,我们一个一个的来了解它的作用;

4.1 Details

Size: 458.8 MB Classes: 974 Objects: 134.3k Class Loader: 4 Unreachable Objects Histogram
size:占用JVM内存大小;
Classes:类的个数;
Objects:对象个数;

4.2 Actions

4.2.1 Histogram(直方图): 列出每个类的实例数量;
在这里插入图片描述

Shallow Heap(浅堆):表示对象本身占用内存的大小,也就是对象头加成员变量(不是成员变量的值)的总和
Retained Heap(保留堆):如果一个对象被释放掉,那会因为该对象的释放而减少引用进而被释放的所有的对象(包括被递归释放的)所占用的heap大小,即对象被垃圾回收器回收后能被GC从内存中移除的所有对象之和。

4.2.2 Dominator Tree(支配树): 列出最大的对象及其保留的内容;
在这里插入图片描述

Shallow Heap(浅堆)、Retained Heap(保留堆)、Percentage(百分比) 是分析出哪个对象出问题的重要参考指标;

4.2.3 Top Consumers(顶级消费者): 打印按类和包分组的最昂贵的对象;

4.2.4 Duplicate Classes(重复类): 检测由多个类加载器加载的类;

4.3 Reports(报告)

4.3.1 Leak Suspects(泄漏嫌疑对象): 就是我们上面4.3看到的内容;

4.3.2 Top Components(顶级组件): 列出大于总堆1%的组件的报告;

5.总结

本文就到这里了,后面如果我学到了其它NB的功能,再补功能;

  • 8
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Eclipse Memory Analyzer(简称MAT)是一款Java堆内存分析器,可以帮助开发人员找出Java应用程序中的内存泄漏和性能问题。以下是使用MAT的步骤: 1. 下载并安装Eclipse MAT插件:MAT是一个Eclipse插件,因此需要先安装Eclipse。然后在Eclipse中打开“Help”菜单,选择“Eclipse Marketplace”,搜索“Memory Analyzer”,安装“Memory Analyzer (MAT)”插件。 2. 导出Java堆转储文件:在Java应用程序出现内存问题时,可以使用Java虚拟机提供的命令生成Java堆转储文件(.hprof文件)。例如,可以使用以下命令生成Java堆转储文件: ``` jmap -dump:format=b,file=heapdump.hprof <pid> ``` 其中,<pid>是Java应用程序的进程ID。 3. 打开Java堆转储文件:在Eclipse中,选择“File”菜单,选择“Open Heap Dump”,并选择生成的Java堆转储文件。 4. 分析Java堆转储文件:在MAT中,可以使用各种工具和视图来分析Java堆转储文件,例如: - “Histogram”视图:显示Java堆中各个对象的数量和占用内存大小。 - “Dominator Tree”视图:显示Java堆中对象之间的继承关系,并计算每个对象及其子对象占用的内存大小。 - “Leak Suspects”视图:检测可能存在内存泄漏的对象,例如无法回收的对象或静态变量引用的对象。 MAT还提供了一些分析工具和插件,例如: - “Path to GC Roots”工具:查找对象到Java堆根之间的引用链。 - “Compare to Baseline”插件:比较两个Java堆转储文件之间的差异。 以上是使用MAT的基本步骤,使用MAT还需要一定的Java虚拟机和内存管理知识。熟练使用MAT可以帮助开发人员更好地解决Java应用程序中的内存问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值