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: 文件已存在