您的位置:首页 > 编程语言 > Java开发

jdk分析工具:jmap和jhat

2015-01-22 09:48 387 查看

jmap

打印出某个java进程(使用pid)内存内的,所有‘对象’的情况(如:产生那些对象,及其数量)。可以输出所有内存中对象的工具,甚至可以将VM 中的heap,以二进制输出成文本。使用方法 jmap -histo pid。如果连用SHELL jmap -histo pid>a.log可以将其保存到文本中去,在一段时间后,使用文本对比工具,可以对比出GC回收了哪些对象。jmap -dump:format=b,file=outfile 3024可以将3024进程的内存heap输出出来到outfile文件里,再配合MAT(内存分析工具(Memory Analysis Tool)或与jhat (Java Heap Analysis Tool)一起使用,能够以图像的形式直观的展示当前内存是否有问题。64位机上使用需要使用如下方式:jmap -J-d64 -heap pid

命令格式

jmap [ option ] pidjmap [ option ] executable corejmap [ option ] [server-id@]remote-hostname-or-IP

参数说明

1)、options:executable Java executable from which the core dump was produced.(可能是产生core dump的java可执行程序)core 将被打印信息的core dump文件remote-hostname-or-IP 远程debug服务的主机名或ipserver-id 唯一id,假如一台主机上多个远程debug服务2)、基本参数:-dump:[live,]format=b,file=<filename> 使用hprof二进制形式,输出jvm的heap内容到文件=. live子选项是可选的,假如指定live选项,那么只输出活的对象到文件.-finalizerinfo 打印正等候回收的对象的信息.-heap 打印heap的概要信息,GC使用的算法,heap的配置及wise heap的使用情况.-histo[:live] 打印每个class的实例数目,内存占用,类全名信息. VM的内部类名字开头会加上前缀”*”. 如果live子参数加上后,只统计活的对象数量.-permstat 打印classload和jvm heap长久层的信息. 包含每个classloader的名字,活泼性,地址,父classloader和加载的class数量. 另外,内部String的数量和占用内存数也会打印出来.-F 强迫.在pid没有相应的时候使用-dump或者-histo参数. 在这个模式下,live子参数无效.-h | -help 打印辅助信息-J 传递参数给jmap启动的jvm.pid 需要被打印配相信息的java进程id

使用示例

查询jvm堆的概要信息
blue@blue-pc:~/apache-tomcat-7.0.39/conf$ jps -ml
2491
9142 org.apache.catalina.startup.Bootstrap start
9168 sun.tools.jps.Jps -ml
2967

root@blue-pc:/home/blue/apache-tomcat-7.0.39/conf# jmap -heap 9142
Attaching to process ID 9142, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 20.10-b01

using thread-local object allocation.
Parallel GC with 4 thread(s)

Heap Configuration:
MinHeapFreeRatio = 40
MaxHeapFreeRatio = 70
MaxHeapSize      = 1031798784 (984.0MB)
NewSize          = 1048576 (1.0MB)
MaxNewSize       = 4294901760 (4095.9375MB)
OldSize          = 4194304 (4.0MB)
NewRatio         = 2
SurvivorRatio    = 8
PermSize         = 16777216 (16.0MB)
MaxPermSize      = 67108864 (64.0MB)

Heap Usage:
PS Young Generation
Eden Space:
capacity = 16121856 (15.375MB)
used     = 15074368 (14.37603759765625MB)
free     = 1047488 (0.99896240234375MB)
93.50268356199187% used
From Space:
capacity = 2686976 (2.5625MB)
used     = 2684584 (2.5602188110351562MB)
free     = 2392 (0.00228118896484375MB)
99.91097799161585% used
To Space:
capacity = 2686976 (2.5625MB)
used     = 0 (0.0MB)
free     = 2686976 (2.5625MB)
0.0% used
PS Old Generation
capacity = 42991616 (41.0MB)
used     = 5071824 (4.8368682861328125MB)
free     = 37919792 (36.16313171386719MB)
11.797239722275153% used
PS Perm Generation
capacity = 16777216 (16.0MB)
used     = 11304456 (10.780769348144531MB)
free     = 5472760 (5.219230651855469MB)
67.37980842590332% used
dump jvm内存信息
root@blue-pc:/home/blue/apache-tomcat-7.0.39/conf# jmap -F -dump:format=b,file=tomcat.bin 9142
Attaching to process ID 9142, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 20.10-b01
Dumping heap to tomcat.bin ...
Finding object size using Printezis bits and skipping over...
Heap dump file created

jhat

用途:是用来分析java堆的命令,可以将堆中的对象以html的形式显示出来,包括对象的数量,大小等等,并支持对象查询语言生成tomcat.bin dump文件后,使用jhat查看
root@blue-pc:/home/blue/apache-tomcat-7.0.39/conf# jhat tomcat.bin
.....
Started HTTP server on port 7000
Server is ready.
访问 http://localhost:7000,就可以查看详细的内存信息 有时你dump出来的堆很大,在启动时会报堆空间不足的错误,可以使用如下参数:
jhat -J-Xmx512m <heap dump file>
本文转载自:http://www.cnblogs.com/ggjucheng/archive/2013/04/16/3024986.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: