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,可以看到类似如下的内容:

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

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

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

对象查询语言(OQL)

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

[ where  ] ]

可以点击 OQL Help 获取帮助

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

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

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

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

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

  1. JVM进阶(十二):JAVA 可视化分析工具实战

    文章目录 一.前言 二.JAVA监视与管理控制台 三.拓展阅读 一.前言 经过前几篇博文对堆内存以及垃圾收集机制的学习,相信小伙伴们已经建立了一套比较完整的理论体系!本篇博文就根据已有的理论知识,通过 ...

  2. java heap分析工具_Java Heap dump文件分析工具jhat简介

    [开发.应用中老是会遇到OutOfMemory异常,而且常常是过一段时间内存才被吃光,这里可以利用java heap dump出jvm内存镜像,然后再对其进行分析来查找问题.<java heap ...

  3. java dump分析工具_java性能分析与常用工具

    本次源码已放在Github:https://github.com/nateshao/jvm-tuning 个人博客 https://nateshao.gitee.io http://www.nates ...

  4. JVM进阶(十二)——JAVA 可视化分析工具

    JVM进阶(十二)--JAVA 可视化分析工具   经过前几篇博文对堆内存以及垃圾收集机制的学习,相信小伙伴们已经建立了一套比较完整的理论体系!本篇博客就根据已有的理论知识,通过可视化工具来实践一番. ...

  5. java dump分析工具_Java 性能分析工具 (2):Java 内置监控工具

    引言 本文为 Java 性能分析工具系列文章第二篇,第一篇:操作系统工具.在本文中将介绍如何使用 Java 内置监控工具更加深入的了解 Java 应用程序和 JVM 本身.在 JDK 中有许多内置的工 ...

  6. Java 性能分析工具一览(JDK自带)

    Jdk自带的监控程序 1. jstat 分析JVM HEAP占用情况 2. jps 查看JVM 进程 3. jmap 分析内存对象占用情况 4. jstack 查看JVM 调用堆栈情况 5. hppr ...

  7. Java内存分析工具——jmap

    Java内存分析工具--jmap 平时我们在开发Java应用的时候,会涉及到分析对象内存.内存监控,那么就涉及到jmap这个工具,学习后来介绍一下 能干嘛? jmap 一般可用于: jmap能够打印给 ...

  8. 超好用的自带火焰图的 Java 性能分析工具 Async-profiler 了解一下

    如果你经常遇到 Java 线上性能问题束手无策,看着线上服务 CPU 飙升一筹莫展,发现内存不断泄露满脸茫然.别慌,这里有一款低开销.自带火焰图.让你大呼好用的 Java 性能分析工具 - async ...

  9. Java内存分析工具MAT(Memory Analyzer Tool)的介绍与使用

    详细介绍了Java内存分析工具MAT(Memory Analyzer Tool)的常见使用方法,MAT可以帮助Java程序员快速进行内存分析,定位问题. MAT(Memory Analyzer Too ...

最新文章

  1. 提高班第三周周记(中秋第一天)
  2. hihocoder#1054 : 滑动解锁(深度优先搜索)
  3. Super Jumping! Jumping! Jumping!
  4. Dubbo与Spring Cloud
  5. Maven私服的配置和使用
  6. 前端基础-CSS如何布局以及文档流,对于新手来说,特别有用
  7. VMware8序列号
  8. VS中使用ankhSVN
  9. Web前端开发之CSS学习笔记5—溢出、浮动、层叠
  10. gets与puts函数
  11. 软件实现串口程序出售,9600收发毫无压力。 采用io管脚模拟,适合串口资源欠缺的芯片使用。 stm32,tms320f28xx,PIC等
  12. ping: unknown host www.baidu.com的解决
  13. SpringBoot集成JWT实现Token登录验证
  14. IDC评述网:11月份海外域名主机服务商TOP10
  15. Maven Archetype脚手架制作
  16. 极光推送 使用实例 (一)服务端
  17. 深入分析IBM的云计算解决方案
  18. idea中输入中文变成繁体字
  19. SCI期刊投稿详细流程有吗?手把手教会的那种
  20. GIT科普系列4:仓库/缓冲区/工作副本,傻傻分不清楚?

热门文章

  1. chromeF12 谷歌开发者工具详解
  2. Andriod Studio 2021.1.1 Patch1 中文汉化方法
  3. Relative Intensity Noise
  4. C#开发微信门户及应用(1)--开始使用微信接口
  5. 关于高内聚低耦合的理解
  6. tmp项目软件测试,软件测试计划 TMP-STP.doc
  7. 淘宝撸猫瓜分20亿红包追线球赢喵币有哪些技巧?
  8. 51单片机实时时钟显示
  9. 苹果春季发布会提前曝光:紫色iPhone 13 Pro冲上热搜,SE3将搭载A15芯片
  10. 利用苹果自带相机进行录像的代码