jhat命令的html页面,jvm 指令工具 jhat 命令(Java堆分析工具)

jhat 简介

jhat 全称:Java Heap Analyse Tool(Java堆分析工具),jhat 也是 jdk 内置的工具之一。

功能:主要是用来分析java堆的命令,可以将堆中的对象以 html 的形式显示出来,包括对象的数量,大小等等,并支持对象查询语言(OQL)。

jhat命令➜  jhat -h

Usage:  jhat [-stack ] [-refs ] [-port ] [-baseline ] [-debug ] [-version] [-h|-help] 

-J          Pass  directly to the runtime system. For

example, -J-mx512m to use a maximum heap size of 512MB

-stack false:     Turn off tracking object allocation call stack.

-refs false:      Turn off tracking of references to objects

-port :     Set the port for the HTTP server.  Defaults to 7000

-exclude :  Specify a file that lists data members that should

be excluded from the reachableFrom query.

-baseline : Specify a baseline object dump.  Objects in

both heap dumps with the same ID and same class will

be marked as not being "new".

-debug :     Set debug level.

0:  No debug output

1:  Debug hprof file parsing

2:  Debug hprof file parsing, no server

-version          Report version number

-h|-help          Print this help and exit

            The file to read

For a dump file that contains multiple heap dumps,

you may specify which dump in the file

by appending "#" to the file name, i.e. "foo.hprof#3".

All boolean options default to "true"

-stack false|true

关闭对象分配调用栈跟踪(tracking object allocation call stack)。

如果分配位置信息在堆转储中不可用,则必须将此标志设置为 false,默认值为 true.

-refs false|true

关闭对象引用跟踪(tracking of references to objects)。

默认值为 true,默认情况下,返回的指针是指向其他特定对象的对象,如反向链接或输入引用(referrers or incoming references),会统计/计算堆中的所有对象。

-port port-number

设置 jhat HTTP server 的端口号,默认值 7000.

-exclude exclude-file

指定对象查询时需要排除的数据成员列表文件(a file that lists data members that should be excluded from the reachable objects query)。 例如,如果文件列列出了 java.lang.String.value,那么当从某个特定对象 Object o 计算可达的对象列表时,引用路径涉及 java.lang.String.value 的都会被排除。

-baseline exclude-file

指定一个基准堆转储(baseline heap dump)。 在两个 heap dumps 中有相同 object ID 的对象会被标记为不是新的(marked as not being new),其他对象被标记为新的(new),在比较两个不同的堆转储时很有用。

-debug int

设置 debug 级别,0 表示不输出调试信息。 值越大则表示输出更详细的 debug 信息.

-version

启动后只显示版本信息就退出

-J< flag >

因为 jhat 命令实际上会启动一个JVM来执行,通过 -J 可以在启动JVM时传入一些启动参数。

例如 -J-Xmx512m 则指定运行 jhat 的Java虚拟机使用的最大堆内存为 512 MB,如果需要使用多个JVM启动参数,则传入多个 -Jxxxxxx.

jhat使用

使用jmap可以生成Java堆的Dump文件。生成dump文件之后就可以用jhat命令,将dump文件转成html的形式,然后通过http访问可以查看堆情况。

jhat命令解析会Java堆dump并启动一个web服务器,然后就可以在浏览器中查看堆的dump文件了。

步骤1:jmap 导出文件

除了使用jmap命令,还可以通过以下方式:使用 jconsole 选项通过 HotSpotDiagnosticMXBean 从运行时获得堆转储(生成dump文件)、

虚拟机启动时如果指定了 -XX:+HeapDumpOnOutOfMemoryError 选项, 则在抛出 OutOfMemoryError 时, 会自动执行堆转储。

使用 hprof 命令jmap -dump:live,file=demo.hprof 

步骤2:jhat 分析文件➜ jhat demo.hprof

Reading from demo.hprof...

Dump file created Thu Aug 01 13:15:47 CST 2019

Snapshot read, resolving...

Resolving 2289831 objects...

Chasing references, expect 457 dots.........................................................................................................................................................................................................................................................................................................................................................................................................................................................................

Eliminating duplicate references.........................................................................................................................................................................................................................................................................................................................................................................................................................................................................

Snapshot resolved.

Started HTTP server on port 7000

Server is ready.

有时你dump出来的堆很大,在启动时会报堆空间不足的错误,可以使用如下参数:jhat -J-Xmx512m 

jhat 在分析完成后,使用HTTP服务器展示其分析结果。访问地址为http://:7000,可以看到类似如下的内容:

bc7fdfc03a181785f939cc7c3cabcadc.gif

内容很长,拖拽到最下面看到 Other Queries

bc7fdfc03a181785f939cc7c3cabcadc.gif

在“Other Queries”一栏中点击不同的链接可以展示不同的内容,如点击“Show heap histogram” 链接,展示堆快照直方图~

bc7fdfc03a181785f939cc7c3cabcadc.gif

点击“Execute Object Query Language (OQL) query”链接,可以使用OQL查询~

bc7fdfc03a181785f939cc7c3cabcadc.gif

对象查询语言(OQL)

OQL是类似于SQL的查询语言,用于查询Java堆。OQL允许筛选/选择Java堆所需的信息。HAT已支持诸如“显示类X的所有实例”之类的预定义查询,而OQL则增加了灵活性。OQL基于JavaScript表达式语言。select [ from [instanceof]  

[ where  ] ]

可以点击 OQL Help 获取帮助

bc7fdfc03a181785f939cc7c3cabcadc.gif

常用类直方图(类、实例数、总大小):http://localhost:7000/histo/

所有类实例统计:http://localhost:7000/showInstanceCounts/includePlatform/

OQL查询:http://localhost:7000/oql/

oql语法帮助:http://localhost:7000/oqlhelp/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值