使用MAT 分析heap dump
- 下载及设置
官方下载: https://www.eclipse.org/mat/
JDK 最好用最新的 JDK, 因为最新的基本优化最多.
根据你分析的 heap dump 的大小, 有时候需要调整 MAT 的 heap 的大小. 这个参数在 MAT 根目录的 MemoryAnalyzer.ini 文件里面. 我经常分析 30G 以下的 heap, 基本设置为 27G, 是 JVM 使用压缩指针来加速.
另外, 对于 HPROF 的 dump 来说, 我经常设置为非严格 parse, 因为有时候有点错误, 不影响分析:
文档: MAT 自带文档在 Help -> Help Contents 菜单里面, 或者[在线版本的文档][3]
- 分析
正常情况下当你打开一个 heap dump 之后, 它会问你是否自动诊断内存泄漏, 如果你不是为了诊断内存泄漏, 可以取消这步.
Histogram: 是按照类的实例数量聚集, 能很快发现包含大量实例的类. 一般情况下 char[] 或者 String 都在最上面, 这基本没有问题.
Dominator Tree: 对于诊断内存泄漏非常有用, 如果能抓到一个对象 dominate 很多实例, 基本你找到了问题所在.
OQL: 就像查询数据库的 SQL 语言, 非常方便的查找任何对象, 实例;
Threads: 查看当前heap的所有线程, 对于发现某个对象是怎么被创建, 或引用的非常有帮助. 如何分析 IBM J9 dump
参看: https://help.eclipse.org/2020-03/index.jsp?topic=/org.eclipse.mat.ui.help/welcome.html
MAT 安装 DTFJ 插件步骤:- 打开 MAT, 菜单: Help -> Install New Software ...
- 点 Add 按钮 添加新的 Repository.
name: DTFJ
Location: http://public.dhe.ibm.com/ibmdl/export/pub/software/websphere/runtimes/tools/dtfj/
点 Add 按钮- 选中 IBM Monitoring and Diagnostic Tools
- 一路 next 下去, 中间接受 license, 然后重启 MAT
更多关于如何使用 OQL: Java heap dump OQL samples - where