MAT 内存分析工具分析Dump文件
前面我们讲解了Jprofiler 对内存快照Dump文件进行分析,快速的定位到内存泄漏的问题,今天我们介绍另外一种内存分析工具 Memory Analyzer Tool 简称MAT
MAT不是一个万能工具,它并不能处理所有类型的堆存储快照文件。但是大部分的文件我们都可以处理, 在分析Dump文件之前 我们先下载MAT 并且达到可使用状态,本文介绍如何安装并启动MAT
1.MAT工具下载
我们可以从eclipse官网 下载MAT内存分析工具,下面是链接地址 www.eclipse.org/mat/downloa…
下载完毕后, 启动MAT,结果尴尬了 ,最新的MAT 依赖最低的JDK 17的版本
。。。。真尴尬
我现在还一直使用JDK8, 为了兼容我们的JDK8,MAT要怎么操作呢?
2.下载及安装JDK17,配置MAT兼容
- 1.从Oracle官网,下载JDK17
需要Oracle账户,如果没有账户的可以先注册一个,注册完毕就可以直接下载, 下面是下载地址
- 2.下载完毕, 安装JDK17
- 3.安装完毕后, 复制JDK17到MAT安装目录
打开JDK17的安装路径信息 C:\Program Files\Java\jdk-17 然后 把整个文件夹,复制到 MAT的安装目录中 我的MAT安装目录是 D:\Programs\mat ,复制完如下
- 4.修改MAT的 初始化文件 MemoryAnalyzer.ini 在 MAT安装目录是 D:\Programs\mat 下面有一个MAT初始化文件 MemoryAnalyzer.ini
- 5.配置JDK17的安装路径
通过VM参数,把JDK17的安装路径,直接添加到 MAT初始化文件 MemoryAnalyzer.ini中 原始文件如下
-startup
plugins/org.eclipse.equinox.launcher_1.6.400.v20210924-0641.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.2.700.v20221108-1024
-vmargs
--add-exports=java.base/jdk.internal.org.objectweb.asm=ALL-UNNAMED
-Xmx1024m
- 6.配置参数 jdk-17/bin/java.exe
配置完信息如下
-vm jdk-17/bin/java.exe
-startup
plugins/org.eclipse.equinox.launcher_1.6.400.v20210924-0641.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.2.700.v20221108-1024
-vmargs
--add-exports=java.base/jdk.internal.org.objectweb.asm=ALL-UNNAMED
-Xmx1024m
- 7.保存初始化文件 MemoryAnalyzer.ini, 然后重新启动 MAT
3. 找到MAT/MemoryAnalyzer.exe 启动程序
找到 MemoryAnalyzer.exe 启动MAT程序, 终于出现界面了,到这一步,至少说明MAT的启动已经不是问题了,我们已经成功的从 无法兼容JDK8, 现在已经能够成功打开MAT了
启动成功后, 展示
至此,我们已经成功的启动了MAT程序,下面我们来看下MAT的基本信息
4.MAT工具使用
首先我们可以看到
[Open a Heap Dump]
[Open a snapshot from your file system or from the list of snapshots you have already worked with:]
选择打开一个快照, 相当于我们Jprofiler中的 选择打开快照
4.1 打开堆快照Dump文件
选择 Leak Suspects Report 内存泄漏嫌疑分析报告->Finish
然后就出现了饼状图 ,我们可以根据饼状图分析出内存泄漏的点,也可以根据饼状图可以看出什么?
- 当前内存中到底有哪些对象信息
- 这些对象分别占据内存空间大小
- 他们之间占用内存的比例多少
至此 我们已经成功的安装了MAT,并且在本地JDK8的环境下,兼容JDK17,成功的启动了MAT,下一篇文章,我们就利用这个神器,对Dump文件开始分析,找出内存泄漏的地方,看看和Jprofiler有什么区别