美文网首页
JDK自带工具之jmap、jhat

JDK自带工具之jmap、jhat

作者: 冰封1999 | 来源:发表于2019-08-02 11:34 被阅读0次

jmap:是JDK自带的内存映像工具。主要用于打印指定Java进程(或核心文件、远程调试服务器)的共享对象内存映射或堆内存细节。以二进制输出成文本。可以使用jmap生成Heap Dump。

jhat:j也是JDK内置的工具之一。主要是用来分析java堆的命令,可以将堆中的对象以html的形式显示出来,包括对象的数量,大小等等,并支持对象查询语言。使用jmap等方法生成java的堆文件后,使用jhat对其进行分析。

jmap命令的常用参数及含义:

1、-heap

说明:命令格式jmap -heap  <pid>,打印java堆的配置情况和使用情况,还有使用的GC算法。

举个栗子:jmap -heap  20532

图1

上图中 Parallel GC表明使用的并行标记回收;

Heap configuration(堆配置):

此命令得到的结果是静态的,只是某一时刻heap的使用情况

Heap Configuration:

       MinHeapFreeRatio        = 0  #最小堆使用比例

       MaxHeapFreeRatio        = 100 #最大堆使用比例

       MaxHeapSize              = 536870912 (512.0MB) #最大堆空间大小

       NewSize                  = 178257920 (170.0MB) #新生代空间大小

       MaxNewSize              = 178257920 (170.0MB) # 最大新生代空间大小

       OldSize                  = 358612992 (342.0MB)

       NewRatio                = 2

       SurvivorRatio            = 8

       MetaspaceSize            = 21807104 (20.796875MB)

       CompressedClassSpaceSize = 1073741824 (1024.0MB)

       MaxMetaspaceSize        = 17592186044415 MB

       G1HeapRegionSize        = 0 (0.0MB)

2、-histo[:live]

说明:打印每个class的实例数目,内存占用,类全名信息. VM的内部类名字开头会加上前缀”*”. 如果live子参数加上后,只统计活的对象数量。

举个栗子:jmap -histo:live 20532

图2

如果对象信息太多,也可以用以下两种方式查看

①加less逐步看:jmap -histo:live 20532 | less;

②将对象信息输出到一个文件中查看:jmap -histo:live 20532  > ../logs/test001.txt,执行命令后,把输出的内容重定向到一个文件中,然后再打开文件查看也可以

3、-dump:[live,]format=b,file=

说明:使用hprof二进制形式,输出jvm的heap内容到文件=. live子选项是可选的,假如指定live选项,那么只输出活的对象到文件。

举个栗子:jmap -dump:format=b,file=outfile 1853,即将1853这个进程的堆内存(heap)输出到outfile文件。

可以用下面两种方式分析改文件:

①使用内存分析工具MAT(Memory Analysis Tool)去打开文件分析;

②用jhat (Java Heap Analysis Tool,java虚拟机自带的一种虚拟机堆转储快照分析工具),能够以图像的形式直观的展示当前内存是否有问题。

MAT使用此处略过

4、下面看一下使用jhat的使用:

[root@frank2logs]# jmap -dump:live,format=b,file=jj1.bin  3432       #黑色斜体部分不允许有空格

Dumping heap to /usr/local/tomcat1/logs/jj1.bin ...

Heap dump file created

[root@frank2logs]#jhat -J-mx1024m jj1.bin        #用jhat分析刚才Dump的堆信息文件

Reading from jj1.bin...

Dump file created Sat Dec 05 15:57:21 CST 2015

Snapshot read, resolving...

Resolving 182676 objects...

Chasing references, expect 36 dots....................................

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

Snapshot resolved.

Started HTTP server on port 7000

Server is ready.

出现上述信息后,在浏览器中打开http://192.168.0.98:7000/(填写自己实际用的地址),出现如下信息:

图3

相关文章

网友评论

      本文标题:JDK自带工具之jmap、jhat

      本文链接:https://www.haomeiwen.com/subject/aaekdctx.html