命令 jhat 对 dump 文件进行分析

jhat 简介

jha命令与njmap 命令搭配使用,用于分析jmap生成的heap dump文件(堆转储快照)。jhat内置了一个微型的HTTP/HTML服务器,对生成的dump文件分析后,可以在浏览器中查看分析结果。

使用jhat命令,会启动一个http服务,默认端口7000。

注:jhat命令在 JDK9、JDK10 中已经被删除,官方建议用 VisualVM 代替。

语法

1
2
3
4
5
6
7
8
9
10
11
jhat [options] heap-dump-file

options 参数说明
* -J< flag >:因为 jhat 命令实际上会启动一个 JVM 来执行,通过 -J 可以在启动 JVM 时传入一些启动参数。例如,-J-Xmx512m 指定运行 jhat 的 JVM 使用的最大堆内存为 512 MB。 如果需要使用多个 JVM 启动参数,则传入多个 -Jxxxxxx。
* -stack false|true:关闭跟踪对象分配调用堆栈。如果分配位置信息在堆转储中不可用,则必须将此标志设置为 false。默认值为 true
* -refs false|true:关闭对象引用跟踪。默认情况下,返回的指针是指向其他特定对象的对象,如反向链接或输入引用(referrers or incoming references),,会统计/计算堆中的所有对象。
* -port port-number:设置 jhat HTTP server 的端口号,默认值 7000。
* -exclude exclude-file:指定对象查询时需要排除的数据成员列表文件。 例如,如果文件列出了 java.lang.String.value,那么当从某个特定对象 Object o 计算可达的对象列表时,引用路径涉及 java.lang.String.value 的都会被排除。
* -baseline exclude-file:指定一个基准堆转储(baseline heap dump)。 在两个 heap dump 文件中有相同 object ID 的对象会被标记为不是新的(marked as not being new),其他对象被标记为新的(new)。在比较两个不同的堆转储时很有用。
* -debug int:设置 debug 级别,0 表示不输出调试信息。 值越大则表示输出更详细的 debug 信息。
* -version:启动后只显示版本信息就退出。

示例

1
2
3
4
5
6
7
8
9
10
11
[lepeng@centos ~]# jhat ‐port 7000 /tmp/dump.dat
Reading from /tmp/dump.dat...
Dump file created Mon Sep 10 01:04:21 CST 2018
Snapshot read, resolving...
Resolving 204094 objects...
Chasing references, expect 40
dots........................................
Eliminating duplicate references........................................
Snapshot resolved.
Started HTTP server on port 7000
Server is ready.

打开浏览器进行访问:http://192.168.40.133:9999/

在最后面有OQL查询功能



命令 jhat 对 dump 文件进行分析
https://flepeng.github.io/021-Java-42-JVM-命令-jhat-对-dump-文件进行分析/
作者
Lepeng
发布于
2024年4月19日
许可协议