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. 使用DOM操作样式表
  2. bring your mac everywhere you go
  3. FastDFS文件上传和下载流程
  4. 服务器推送系统安装,搭建PXE服务器,推送安装linux系统
  5. 多个线程作用于同一个runnable对象
  6. 图论 —— 图的连通性 —— 传递闭包
  7. ssis 数据转换_SSIS数据类型:高级编辑器的更改与数据转换的转换
  8. 【Oracle】SCOPE=MEMORY|SPFILE|BOTH
  9. PostgreSQL的notify 与listen (三)
  10. java中的@Override标签
  11. Windows下基于IIS服务的SSL服务器的配置
  12. IDEA 自定义注释
  13. 高等数学学习笔记——第六十讲——向量值函数的导数与积分
  14. 为什么要用Handler
  15. 海南“多规合一”改革促行政审批提速城乡面貌提质
  16. 模块独立性与高内聚低耦合
  17. IP地址划分【分类:A类 B类 C类 D类 E类】
  18. 模拟支付宝、淘宝登录1
  19. 自动化 Google 以图搜图
  20. React 高阶组件(HOC)

热门文章

  1. HSV介绍二:HSV颜色识别-HSV基本颜色分量范围
  2. SysUtils.QuotedStr - 加单引号
  3. View‘s SELECT contains a subquery in the FROM clause
  4. PKUWC2019 赛前模拟赛总结
  5. php crypt 结果等于盐,php crypt函数怎么用
  6. 基于ssm的高校学籍管理系统
  7. Vivado报错[place 30-484] The packing of LUTRAM/SRL instance
  8. python 编译器pyc_python编译pyc和pyo
  9. Echarts 柱状图、饼状图等变换颜色、渐变色
  10. 计算机网络面试题总结(2022最新版)