`

性能测试 -- jmap 输出内存中对象 的工具使用 --监控java内存溢出

阅读更多
jmap是输出内存中对象的工具,甚至可以将VM 中的heap以二进制输出成文本。可以监控JAVA程序是否有内存泄漏。

两种使用方法:
一、jmap -histo pid在内存使用峰值前后分别dump一次,可以对比出GC回收了哪些对象。
1.sudo su admin -c "/opt/taobao/java_1.6.0.21/bin/jmap -histo pid > jmap.txt"
2.vi jmap.txt 一般查看前几项即可。


二、jmap -dump:format=b,file=f1 PID 将该内存heap输出到f1文件里,配合eclipse插件MemoryAnalyzer来使用。
主要操作步骤:
<一>.JMap安装与应用
1.安装JDK,推荐1.6以上版本
2.JMap在windows上的路径:\Java\jdk1.6.0_07\bin\jmap.exe



<二>.JMap dump内存
以下举例为在linux服务器端获取的应用服务系统在性能测试过程中占用的内存以及进行分析的操作。

1、在java程序运行期间,在内存出现拐点的时候,dump内存,并建立内存数据文件。例如
/opt/ao/java1/bin/jmap -dump:live,file=dump_001.bin PID
该命令执行后,会获取当前应用服务系统的占用内存并且保存在dump_001.bin文件。

如下操作:

[haan@v021062 admin]$ sudo -u admin -H /opt/o/java1/bin/jmap -dump:live,file=/home/admin/dump_001.bin 16885
Dumping heap to /home/admin/dump_001.bin ...
Heap dump file created
*****************************************************************************
2、在内存出现泄露、溢出或者其它前提条件下,建议多dump几次内存,把内存文件进行编号归档,便于后续内存整理分析。

3、当dump下来的转储文件比应用的-Xmx参数小很多的话,一般不需要分析。
在heapdump内存时,命令参数,请参考SUN 公司的JAVA官方文档,访问地址:http://java.sun.com/javase/6/docs/technotes/tools/share/jmap.html




<三>.Memory Analyzer分析dump下来的内存

Memory Analyzer (MAT)是一个JAVA内存分析工具,可用来帮助发现内存泄露,以及优化程序,使内存消耗降低。
一、准备工作:
1、请到http://www.eclipse.org/mat/下载MemoryAnalyzer-Incubation新版本。
2、MAT对服务器要求较高,如果转储文件太大(>3G)的话,建议在64的服务器上使用MAT(vnc)
二、Member Leak 分析三部曲:
1、启动MAT,并打开转储文件。File > Open Heap Dump...
2、生成Leak Suspects Report



3、在Leak Suspects Report的Leaks视图中,MAT会给出它怀疑有问题的若干个对象。你需要做的就是
a.确定它认为的问题在你的应用里是不是可以忽略,
b.a步骤后剩下的问题可能就是应用症结所在,  

资料参考:
http://www.eclipse.org/mat/
http://java.sun.com/javase/6/docs/technotes/tools/share/jmap.html
http://java.sun.com/j2se/1.5.0/docs/tooldocs/share/jmap.html



分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics