jvm 及内存泄露分析

 

一、生成堆存储文件

1、通过配置jvm参数,让程序在崩溃时自动保存堆存储文件

-XX:+HeapDumpOnOutOfMemoryError

JVM 就会在发生内存泄露时抓拍下当时的内存状态,也就是我们想要的堆转储文件。

如果你不想等到发生崩溃性的错误时才获得堆转储文件,也可以通过设置如下 JVM 参数来按需获取堆转储文件。

-XX:+HeapDumpOnCtrlBreak

 

除此之外,还有很多的工具,例如 JMap,JConsole 都可以帮助我们得到一个堆转储文件。本文实例就是使用 JMap 直接获取了 Eclipse Galileo 进程的堆转储文件。您可以使用如下命令:

2、使用jmap 导出

jmap -dump:format=b,file=<dumpfile> <pid>

也可以直接在控制台用命令查看jvm内存使用情况

jmap -histo <pid>

 

 

二、分析堆存储文件

1、使用jdk自带的 jhat,命令是

jhat -J-Xmx512m <dumpfile>

然后打开浏览器 http://127.0.0.1:7000查看信息

 

2、使用eclipse的“Eclipse Memory Analyzer” 分析

安装 插件,重启,然后打开 导出的堆存储文件即可,可参考:https://www.ibm.com/developerworks/cn/opensource/os-cn-ecl-ma/。

 

 

 

 

 

 

参考资料:

1、java内存查看与分析

2、 使用 Eclipse Memory Analyzer 进行堆转储文件分析 https://www.ibm.com/developerworks/cn/opensource/os-cn-ecl-ma/

3、 使用Memory Analyzer tool(MAT)分析内存泄漏(二) http://www.blogjava.net/rosen/archive/2010/06/13/323522.html

posted @ 2017-03-03 20:43  xunux  阅读(252)  评论(0编辑  收藏  举报