【发布时间】:2016-04-13 14:42:30
【问题描述】:
我有 Java 程序在 Linux 平台上运行,它经常崩溃;在这种情况下,我想自动进行 heapdump。
有没有人有脚本/方法可以在 Linux 上的 Java 进程遇到“OutOfMemory 错误”时自动创建堆转储?
感谢您的帮助。
【问题讨论】:
标签: java linux jvm out-of-memory heap-dump
我有 Java 程序在 Linux 平台上运行,它经常崩溃;在这种情况下,我想自动进行 heapdump。
有没有人有脚本/方法可以在 Linux 上的 Java 进程遇到“OutOfMemory 错误”时自动创建堆转储?
感谢您的帮助。
【问题讨论】:
标签: java linux jvm out-of-memory heap-dump
要自动进行堆转储,请编辑 {installation directory}/bin/setenv.sh 并将其添加到 JAVA_OPTS:
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=[堆转储路径]
【讨论】:
查看this page 的 JVM 选项,具体来说:
-XX:HeapDumpPath=./java_pid.hprof 堆转储的目录或文件名路径。可管理。 (在 1.4.2 更新 12、5.0 更新 7 中引入。)
-XX:-HeapDumpOnOutOfMemoryError 抛出 java.lang.OutOfMemoryError 时将堆转储到文件。可管理。 (在 1.4.2 更新 12、5.0 更新 7 中引入。)
【讨论】:
如Oracle 文档中所述:
-XX:+HeapDumpOnOutOfMemoryError 命令行选项告诉 HotSpot VM 在无法满足来自 Java 堆或永久代的分配时生成堆转储。使用此选项运行不会产生任何开销,因此它对于 OutOfMemoryError 需要很长时间才能出现的生产系统非常有用。
【讨论】: