返回 导航

其他

hangge.com

Java - 获取JVM堆快照文件教程(hprof文件)

作者:hangge | 2021-06-11 08:03
    OOM,全称“Out Of Memory”。当 JVM 内存严重不足时,就会抛出 java.lang.OutOfMemoryError 错误。而 JVM dump 文件则是定位内存泄漏等 OOM 问题的关键证据,下面通过样例演示如果生成这个文件。

方式一:让 JVM 碰到 OOM 场景时自动输出 dump 信息

(1)我们可以添加 -XX:+HeapDumpOnOutOfMemoryError 参数开启“当堆内存空间溢出时输出堆的内存快照”功能,而 -XX:HeapDumpPath 参数则指定生成的堆转储存放位置。
//存放位置使用相对路径
nohup java -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./ -jar test-0.0.1-SNAPSHOT.jar >/dev/null 2>&1 &

//存放位置使用绝对路径
nohup java -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/usr/local/log/ -jar test-0.0.1-SNAPSHOT.jar >/dev/null 2>&1 &

(2)这样当发生 OOM 时,指定目录下就会生成一个名为 java_pidxxxx.hprof 的文件,然后我们就可以使用 MAT 等工具打开这个文件进行分析了。

方式二:在运行时手动导出堆 Dump 文件

(1)首先执行 jps 命令找到相应 java 进程的 pid

(2)接着使用 jmap 命令导出即可:
jmap -dump:format=b,file=/usr/local/test.hprof 6902

(3)如果是 Windows 系统我们也可以直接使用JDK自带的 jvisualvm 工具(在 JDKbin 目录下),选择 Java 进程后点击“监视”选项卡下的“堆 Dump”按钮生成,然后另存为即可。
评论

全部评论(0)

回到顶部