Java-IBM JDK 、SUN JDK、HP JDK如何产生Heapdump文件

Java-IBM JDK 、SUN JDK、HP JDK如何产生Heapdump文件

虐人心 发布于 2017-09-30 字数 185 浏览 1226 回复 2

JAVA中,通过分析Heapdump文件可以检查程序是否存在内存泄露,但是这个文件一般是在程序遇到致命问题时才会产生,所以想问一下,如何事前生成这个文件,从而在程序尚末崩溃前找出问题的所在。

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

归属感 2017-11-10 2 楼

SUN JDK生成Heapdump文件只需要在tomcat启动脚本中增加 HeapDumpOnOutOfMemoryError 参数
此参数需要Java SE release 5.0 update 14 或以上支持

设置示例:
set JAVA_OPTS=%JAVA_OPTS% -server -Xms512m -Xmx800m -XX:PermSize=64M -XX:MaxPermSize=128m -Djava.awt.headless=true -XX:+HeapDumpOnOutOfMemoryError -XX:+HeapDumpOnCtrlBreak

IBM JDK生成Heapdump文件的开关:
— export IBM_HEAPDUMP=true
— export IBM_HEAP_DUMP=true
— export IBM_HEAPDUMP_OUTOFMEMORY=true
— export IBM_JAVADUMP_OUTOFMEMORY=true
— export IBM_JAVACORE_OUTOFMEMORY=true
— export IBM_HEAPDUMPDIR=<directory_path>

HP JDK生成Heapdump文件需要在在环境变量上,加上export _JAVA_HEAPDUMP=1

甜柠檬 2017-10-03 1 楼

https://visualvm.java.net/, 是针对SUN JDK的, 不过也可以连结IBM JDK. 可以google一下. 很强大的工具, 这是在我机器上产生的heapdump:

JMAP:
jmap -dump:file=heap.bin <PID>
Unix下, kill -3 <PID>; WIndows下, 用SendSignal.exe <PID> (但我在自己的Windows试了, 似乎没有 吐核, 待验证.)