JVM堆内存转储

在发生内存溢出错误 java.lang.OutOfMemoryError 时, JVM自动执行堆内存转储,以方便事后进行排查和分析。

JVM提供了一个命令行启动参数 HeapDumpOnOutOfMemoryError , 使用的格式为:

java -XX:+HeapDumpOnOutOfMemoryError

  • 如果不用 HeapDumpPath 选项指定转储路径,则会自动保存到启动目录下,文件名的格式为:

java_pid<pid>.hprof

  • 指定 HeapDumpPath 参数的使用示例如下:

java -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=<file-or-dir-path>

对于某个应用服务,启动脚本中设置内存溢出转储路径为/opt/logs/app。如下:

特别说明:不建议内存溢出文件名写死,建议只写路径;否则,再次发生内存溢出,内存溢出文件无法成功保存。

如下:文件命名为heapdump.hprof,下次发生内存溢出,再次生成的heapdump.hprof无法保存。

无法保存的提示如下:

java.lang.OutOfMemoryError: Java heap space
Dumping heap to /opt/logs/app/heapdump.hprof ...
Unable to create /opt/logs/app/heapdump.hprof: 文件已存在

发布于 2022-09-03 17:29

文章被以下专栏收录