MAT MemoryAnalyzer如何查看分析hprof日志文件

由于最近生产遇到JVM问题,需要分析dump文件,如果对相关分析工具没有使用过的小伙伴来说可能懵圈,这里介绍一下MAT工具排查问题的使用方法;
1.MAT安装
没有安装过的小伙伴先点 链接 进行下载;解压之后包含以下文件:
在这里插入图片描述
这里要注意一个问题,因为服务挂掉之后打印hprof文件往往是比较大的,可能有2G左右,所以需要打开MemoryAnalyzer.ini,修改JVM堆参数(注意:修改堆大小需要超过你分析的hprof 文件的大小,我这里是hprof文件比较大定义为5120M):
在这里插入图片描述
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[8192]);
        }
    }
}

修改JVM参数:

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

3.分析dump文件
将生成的test.hprof文件导入到MAT中:
在这里插入图片描述
导入后,强出上面的对话框:

Leak Suspects Report: 漏洞疑点报告,自动检查堆转储是否存在泄漏嫌疑,报告哪些对象被保存起来,为什么它们没有被垃圾收集;
Component Report: 元件报告,分析一组对象是否存在可疑的内存问题:重复的字符串、空集合、终结器、弱引用等
Re-open previously run reports: 打开以前的运行报告;

选择Leak Suspects Report,点击完成;

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

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

4.1 Details

Size: 2G 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%的组件的报告;

  • 27
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值