博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java命令学习系列(五)——jhat
阅读量:6343 次
发布时间:2019-06-22

本文共 2812 字,大约阅读时间需要 9 分钟。

jhat(Java Heap Analysis Tool),是一个用来分析java的堆情况的命令。之前的文章讲到过,使用可以生成Java堆的Dump文件。生成dump文件之后就可以用jhat命令,将dump文件转成html的形式,然后通过http访问可以查看堆情况。

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

实例

一、导出dump文件

关于dump文件的生成可以看命令的详细介绍.

1、运行java程序

/** * Created by hollis on 16/1/21. */public class JhatTest { public static void main(String[] args) { while(true) { String string = new String("hollis"); System.out.println(string); } } }

2、查看该进程的ID

HollisMacBook-Air:apaas hollis$ jps -l 68680 org.jetbrains.jps.cmdline.Launcher 62247 com.intellij.rt.execution.application.AppMain 69038 sun.tools.jps.Jps

使用命令查看发现有三个java进程在运行,一个是我的IDEA使用的进程68680,一个是JPS命令使用的进程69038,另外一个就是上面那段代码运行的进程62247。

3、生成dump文件

HollisMacBook-Air:test hollis$ jmap -dump:format=b,file=heapDump 62247 Dumping heap to /Users/hollis/workspace/test/heapDump ... Heap dump file created

以上命令可以将进程6900的堆dump文件导出到heapDump文件中。

查看当前目录就能看到heapDump文件。

除了使用jmap命令,还可以通过以下方式:

1、使用 jconsole 选项通过 HotSpotDiagnosticMXBean 从运行时获得堆转储(生成dump文件)、

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

3、使用 hprof 命令

二、解析Java堆转储文件,并启动一个 web server

HollisMacBook-Air:apaas hollis$ jhat heapDump Reading from heapDump... Dump file created Thu Jan 21 18:59:51 CST 2016 Snapshot read, resolving... Resolving 341297 objects... Chasing references, expect 68 dots.................................................................... Eliminating duplicate references.................................................................... Snapshot resolved. Started HTTP server on port 7000 Server is ready.

使用jhat命令,就启动了一个http服务,端口是7000

然后在访问http://localhost:7000/

页面如下:

三、分析

在浏览器里面看到dump文件之后就可以进行分析了。这个页面会列出当前进程中的所有对像情况。

该页面提供了几个查询功能可供使用:

All classes including platform// Show all members of the rootset Show instance counts for all classes (including platform) Show instance counts for all classes (excluding platform) Show heap histogram Show finalizer summary Execute Object Query Language (OQL) query

一般查看堆异常情况主要看这个两个部分:

Show instance counts for all classes (excluding platform),平台外的所有对象信息。如下图:

Show heap histogram 以树状图形式展示堆情况。如下图:

具体排查时需要结合代码,观察是否大量应该被回收的对象在一直被引用或者是否有占用内存特别大的对象无法被回收。

用法摘要

这一部分放在后面介绍的原因是一般不太使用。

HollisMacBook-Air:~ hollis$ jhat -help 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

转载地址:http://xlkla.baihongyu.com/

你可能感兴趣的文章
python模块—os
查看>>
linux下解压zip乱码
查看>>
do-while()用法
查看>>
Android开发视频教学
查看>>
2.0-iptables详解
查看>>
企业扩张引发邮件系统更换案例分析
查看>>
HTML code of signature for IBM Lotus Notes
查看>>
永中软件受邀参加了“云网”(无锡站)
查看>>
追加内容到文件末尾的几种常用方法
查看>>
kqemu安装之过程
查看>>
使用mysql-proxy软件实现mysql读写分离
查看>>
cut,sort,uniq,tee,tr,split命令
查看>>
华为交换机基本命令配置:建立VLAN,把端口划分到对于vlan上
查看>>
购物车小程序练习
查看>>
新手从Python的哪个版本开始学比较好?
查看>>
exchange 2010对手机邮箱执行远程擦除
查看>>
Windows Server 2012 R2服务器-域控功能介绍-第一篇认识与了解
查看>>
五月指标
查看>>
Python学习笔记__19.4章 使用Web框架
查看>>
我的友情链接
查看>>