-XX:+HeapDumpOnOutOfMemoryError可自动触发堆快照生成,仅对Java堆溢出(java.lang.OutOfMemoryError: Java heap space)生效,默认生成java_pid.hprof文件;配合-XX:HeapDumpPath可指定路径与命名(如%pid、%t),需确保磁盘空间、写权限,并注意STW影响。

在Java应用发生OutOfMemoryError时,通过-XX:+HeapDumpOnOutOfMemoryError参数可自动触发堆快照(heap dump)生成,便于后续用工具(如VisualVM、JProfiler、Eclipse MAT)分析内存泄漏或对象堆积问题。
基本启用方式
只需在JVM启动参数中添加该选项即可:
-
-XX:+HeapDumpOnOutOfMemoryError:开启自动dump功能 - 默认会在当前工作目录生成名为
java_pid<pid>.hprof</pid>的文件(例如java_pid12345.hprof) - 该参数仅对
java.lang.OutOfMemoryError: Java heap space生效,不适用于元空间溢出、栈溢出等其他OOM类型
指定dump文件路径与名称
使用-XX:HeapDumpPath控制保存位置和命名规则,提升可维护性:
-
-XX:HeapDumpPath=/var/log/myapp/:存放到指定目录,文件名仍为默认格式 -
-XX:HeapDumpPath=/var/log/myapp/oom_%p.hprof:%p会被替换为进程PID,避免多实例覆盖 -
-XX:HeapDumpPath=/var/log/myapp/oom_%t.hprof:%t展开为时间戳(毫秒级),适合调试环境
配合其他诊断参数更有效
单靠堆快照可能不足以定位根因,建议组合使用:
立即学习“Java免费学习笔记(深入)”;
-
-XX:+PrintGCDetails -Xloggc:/path/to/gc.log:记录GC行为,辅助判断是否频繁GC或内存回收异常 -
-XX:+PrintGCTimeStamps:为GC日志添加时间戳,便于与OOM时间对齐 -
-XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=10M:防止GC日志无限增长
注意事项与常见问题
实际使用中需留意以下几点:
- dump文件体积通常接近堆最大值(-Xmx),确保
HeapDumpPath所在磁盘有足够空间 - 生成dump会暂停应用(Stop-The-World),时间取决于堆大小和IO性能;生产环境慎用于高可用服务
- 若应用以非root用户运行,需确认目标路径有写入权限,否则dump会静默失败(无报错但无文件生成)
- OpenJDK 8u92+ 和 JDK 9+ 默认支持该参数;旧版本需确认JVM是否兼容


















