使用MAT 分析heap dump

  1. 下载及设置
    官方下载: https://www.eclipse.org/mat/
    JDK 最好用最新的 JDK, 因为最新的基本优化最多.
    根据你分析的 heap dump 的大小, 有时候需要调整 MAT 的 heap 的大小. 这个参数在 MAT 根目录的 MemoryAnalyzer.ini 文件里面. 我经常分析 30G 以下的 heap, 基本设置为 27G, 是 JVM 使用压缩指针来加速.

sjc-sreop-001.png

另外, 对于 HPROF 的 dump 来说, 我经常设置为非严格 parse, 因为有时候有点错误, 不影响分析:

sjc-sreop-002.png

文档: MAT 自带文档在 Help -> Help Contents 菜单里面, 或者[在线版本的文档][3]
  1. 分析
    正常情况下当你打开一个 heap dump 之后, 它会问你是否自动诊断内存泄漏, 如果你不是为了诊断内存泄漏, 可以取消这步.
    Histogram: 是按照类的实例数量聚集, 能很快发现包含大量实例的类. 一般情况下 char[] 或者 String 都在最上面, 这基本没有问题.
    Dominator Tree: 对于诊断内存泄漏非常有用, 如果能抓到一个对象 dominate 很多实例, 基本你找到了问题所在.
    OQL: 就像查询数据库的 SQL 语言, 非常方便的查找任何对象, 实例;
    Threads: 查看当前heap的所有线程, 对于发现某个对象是怎么被创建, 或引用的非常有帮助.
  2. 如何分析 IBM J9 dump
    参看: https://help.eclipse.org/2020-03/index.jsp?topic=/org.eclipse.mat.ui.help/welcome.html
    MAT 安装 DTFJ 插件步骤:

    1. 打开 MAT, 菜单: Help -> Install New Software ...
    2. 点 Add 按钮 添加新的 Repository.

    name: DTFJ
    Location: http://public.dhe.ibm.com/ibmdl/export/pub/software/websphere/runtimes/tools/dtfj/
    点 Add 按钮

    1. 选中 IBM Monitoring and Diagnostic Tools
    2. 一路 next 下去, 中间接受 license, 然后重启 MAT

    更多关于如何使用 OQL: Java heap dump OQL samples - where

标签: none

添加新评论