MAT使用指南
Memory Analyzer (MAT)
The Eclipse Memory Analyzer is a fast and feature-rich Java heap analyzer that helps you find memory leaks and reduce memory consumption.
安装
官网地址:https://www.eclipse.org/mat/
目前MAT已经迭代到了1.12.0版本, 已经支持解析OpenJDK 15的堆信息。
需要注意的是,MAT本身也是java应用,运行所需的最低java版本已经是Jdk 11了。
配置
解压之后,根据自己的电脑配置和堆转储文件的大小,酌情改一下MemoryAnalyzer.ini中的Xmx的大小。
获取堆转储文件
介绍几种方式:
- 从服务器上直接dump,一般是联系运维同学帮忙操作,传到本地进行分析。
|
|
- 还可以配置在启动参数上,当发生内存溢出时,会自动dump文件。
|
|
- 通过VisualVM,这里建议下载一个idea插件:
插件安装好之后,可以在debug按钮后面找到新增的两个橘色按钮,和正常的run、debug相比,会在启动的同时打开 Java visualVM。
切换到监视页签,可以点击图示位置的按钮,进行dump操作。
加载文件
这里面最常用的功能就是Histogram、Leak Suspects。
先贴一下代码:
|
|
Leak Suspects:
图中黄色部分是问题描述,一个tomcat任务线程保存了33M的本地变量,Keywords里面甚至给出了具体的类名和行数。
点进详情,还可以查看完整的堆栈信息
Histogram
上面三个步骤,意思是查看排除虚引用/弱引用/软引用等的引用链,因为被虚引用/弱引用/软引用的对象可以直接被GC给回收,我们要看的就是某个对象否还存在Strong 引用链(在导出HeapDump之前要手动出发GC来保证),如果有,则说明存在内存泄漏,然后再去排查具体引用。
可以清楚的看到List里面,33个byte数组,每个占用1M内存。
好了,今天就先介绍到这里,我们下期再见👋🏻。