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/。
参考资料:
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