数量)。
可以输出所有内存中对象的工具,甚至可以将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),
使用参见:http://blog.csdn.net/fenglibing/archive/2011/04/02/6298326.aspx)或与jhat (Java Heap Analysis Tool)一起使用,
能够以图像的形式直观的展示当前内存是否有问题。 64位机上使用需要使用如下方式: jmap -J-d64 -heap pid 4.2 命令格式 SYNOPSIS
jmap [ option ] pid
jmap [ option ] executable core
jmap [ option ] [server-id@]remote-hostname-or-IP 4.3 参数说明 1)、options:
executable Java executable from which the core dump was produced. (可能是产生core dump的java可执行程序) core 将被打印信息的core dump文件
remote-hostname-or-IP 远程debug服务的主机名或ip server-id 唯一id,假如一台主机上多个远程debug服务 2)、基本参数:
-dump:[live,]format=b,file=
-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,创业与打工的区别 - 博文预览,可以用jps查问. 4.4 使用例子 4.4.1 打印类信息
jmap -J-d64 -histo:live 10968 > /tmp/class.tx
4.4.2 以二进制形式输出heap内容到文件
jmap -J-d64 -dump:live,format=b,file=/tmp/jmap_b.bin 10968 4.4.3 打印准备回收的对象的信息 jmap -J-d64 -finalizerinfo 10968 4.4.4 打印持久层的信息
4.4.5 打印堆heap的信息
jmap -J-d64 -heap 10968 Attaching to process ID 10968, please wait... Debugger attached successfully. Server compiler detected. JVM version is 17.1-b03
using thread-local object allocation. Parallel GC with 8 thread(s)
Heap Configuration: MinHeapFreeRatio = 40 MaxHeapFreeRatio = 70
MaxHeapSize = 3145728000 (3000.0MB) NewSize = 1310720 (1.25MB) MaxNewSize = 268435456 (256.0MB) OldSize = 5439488 (5.1875MB) NewRatio = 2 SurvivorRatio = 8
PermSize = 134217728 (128.0MB) MaxPermSize = 268435456 (256.0MB)
Heap Usage:
PS Young Generation Eden Space:
capacity = 243793920 (232.5MB)
used = 64814496 (61.811920166015625MB) free = 178979424 (170.68807983398438MB) 26.585772114415324% used From Space:
capacity = 11403264 (10.875MB)
used = 9095024 (8.673690795898438MB) free = 2308240 (2.2013092041015625MB) 79.75807628412356% used To Space:
capacity = 12320768 (11.75MB)
used = 0 (0.0MB)
free = 12320768 (11.75MB) 0.0% used PS Old Generation
capacity = 2877292544 (2744.0MB)
used = 328689408 (313.462646484375MB) free = 2548603136 (2430.537353515625MB) 11.423565833978682% used PS Perm Generation
capacity = 134217728 (128.0MB)
used = 44710992 (42.63972473144531MB) free = 89506736 (85.36027526855469MB) 33.31228494644165% used
5. Jhat
5.1 简介
jhat命令 -- Java Head Analyse Tool
用途:是用来分析java堆的命令,可以将堆中的对象以html的形式显示出来,包括对象的数量,大小等等,并支持对象查询语言 5.2 使用方法: 1> 到处堆文件
jmap -J-d64 -dump:live,format=b,file=/tmp/jmap_b.bin 10968 2> 分析堆文件
jhat -J-d64 -port 9015 /tmp/jmap_b.bin 指定访问端口为:9015 3> 查看:
http://ip:9015/
6. Mat
6.1 简介
MAT(Memory Analyzer Tool),一个基于Eclipse的内存分析工具,是一个快速、功能丰富的JAVA heap分析工具,
它可以帮助我们查找内存泄漏和减少内存消耗。使用内存分析工具从众多的对象中进行分析,快速的计算出在内存中对象的占用大小,
看看是谁阻止了垃圾收集器的回收工作,并可以通过报表直观的查看到可能造成这种结果的对象。 6.2 为什么使用MAT
当服务器应用占用了过多内存的时候,会遇到OutOfMemoryError。如何快速定位问题呢? Eclipse MAT的出现使这个问题变得非常简单。它能够离线分析dump的文件数据。
Eclipse MAT是SAP公司贡献的一个工具,可以在Eclipse网站下载到它,完全免费的。它可比Sun提供的内存镜像分析工具jhat要强太多了。
6.3 使用 6.3.1 下载
到http://www.eclipse.org/mat/downloads.php下载windows系统安装版或eclipse使用的插件
我这里使用的是安装版本是:
MemoryAnalyzer-1.1.1.20110824-win32.win32.x86.zip 解压后直接执行: 界面如下:
6.3.2 生成heap的二进制堆文件
jmap -J-d64 –dump:format=b,file=/tmp/jmap_b.bin 10968 6.3.3 用mat打开jmap_b.bin文件
选择:Open Heap Dump…打开heap二进制文件。 然后出现如下界面:
相关推荐: