MAT内存分析 Overview概览图
前面我们讲解了MAT内存分析工具,打开Dump文件后,找到Leak Suspects内存泄漏检测点,在它的左侧有一个Overview概率图信息,本文我们主要讲解以下概率图可以帮我们看哪些内容
1.Overview 概览图
下面我们看下概览图,都包含哪些东西,大致分为三大块
- Details 大小,类信息,及不可达对象分析
- biggest object by retained size(占用内存最大的几个对象) 及Remainder 正常内存对象信息
- Actions 大对象排序信息,Reports 内存泄漏信息, Step by step 分析相同根或者类加载器信息
2.Detail 分析
下面我们看下Detail信息
- Size: 68.2 MB 总大小68.2M
- Classes: 6.1k 类数量6.1K
- Objects: 156.8k 对象数量156.8K
- Class Loader: 30 类加载器30种
- Unreachable Objects Histogram 不可达的大对象信息,其实这部分就是应该被回收的对象,但是现在仍然存活在内存中,这部分是要重点看下
下面我们看下 不可达的大对象信息有什么? 可以看到不可达对象中存在
- 很多的类信息Class
- 这些对象的数目 信息 objects,
- 对象占用的浅堆 Shallow Heap 对象本身的大小信息
3. Biggest object by retained size
biggest object by retained size中有哪些信息?
- 总大小 total 68.2M
- Remainder Size 正常的内存对象50.2M
- 剩余的就是不正常的内存,也就是可能泄漏的内存 ,很多线程,每个线程2M
4.Actions 具体的操作信息
4.1 Histogram: Lists number of instances per class 大对象信息
点击 Histogram ,我们可以看到内存中的对象信息
- 对象类型 ClassName
- 具体的对象的数量 Objects
- 对象浅堆 Shallow Heap 对象本身大小
- 对象深堆 Retained Heap 对象回收可回收大小
我们找一个最大的 对象,分析下 点击 Byte[] , 点击List objects, 点击 use incoming 分析入对象,被谁引用
点击 Retained Head 进行排序, 就可以得到 最大的哪些对象信息
然后找 GC ROOT根信息,exclude all 链接信息, 就能得到线程信息
然后展开线程
看下线程为什么这么大,到底它引用了什么东西
然后找 自己熟悉的代码, 自己写的类信息,看能否发现问题
发现是 TestController 的 test方法出的问题, 定位到该问题
4.2 Dominatro Tree 对象的支配树
点击对象支配树,可以看到 对象的类信息,深堆,浅堆,内存占比Percentage信息
同样的思路, 点击 大对象, 查看Outgoing 信息
展开,发现定位问题 TestController的test方法
4.3 Top Consumers 大对象信息排序
在TopConsumers 中,我们可以看到 整个内存的分布信息,并且内存中的每一块,每一个部分占比都非常清晰,这块的内容 我们放到内存泄漏部分去讲解, 本文我们先有个大概的了解
- 左侧饼图和右侧占比 一一对应
- 大对象类信息 Dominator Classes 统计
- 大对象包信息 Diminator Packages 统计
顶部的消费者:打印最昂贵的对象按类和包
4.4 Duplicate Classes 重复的类
重复的类是检测由多个类加载器加载的类信息
5. REPORTS 报告信息
- Leak Suspects:重点关注,就是内存泄漏的排查点, 包括泄漏嫌疑人和系统概述
- Top Components:列表报告成分大于百分之1的总的堆
内存泄漏的排查点 Leak Suspects 如下
Top Components 如下
6.Step By Step
- Component Report: Analyze objects which belong to a common root package or class loader
- 部分报告:分析对象,属于一个共同的根包或类加载器
这块意义不大,不需要关注
本文,我们讲解了MAT Overview的概览图信息,包括概览图中下面的 Histogram大对象信息, DominatorTree 对象支配树信息, Leak Suspects 内存泄漏排查点等等功能,并且利用大对象,我们已经定位到了问题,这些都是我们在分析内存泄漏的时候的利器,下一篇我们主要讲解内存泄漏排查点的功能