XX:+ HeapDumpOnOutOfMemoryError最大文件大小限制

时间:2016-03-11 00:57:58

标签: java jvm jvm-arguments

我正在使用XX:+HeapDumpOnOutOfMemoryError JVM标志运行Java进程并看到以下输出:

java.lang.OutOfMemoryError: Java heap space
Dumping heap to /local/disk2/heaps/heapdump.hprof ...
Dump file is incomplete: file size limit

有没有办法解决这个问题?

2 个答案:

答案 0 :(得分:5)

-XX:+HeapDumpOnOutOfMemoryError命令行选项告诉HotSpot VM在无法满足Java堆或永久代的分配时生成堆转储。运行此选项没有任何开销,因此它对于OutOfMemoryError需要很长时间才能浮出水面的生产系统非常有用。

为了解决您面临的具体问题,您可以使用以下纠正措施之一:

措施1: XX:HeapDumpSegmentSize

  

-XX:HeapDumpSegmentSize选项在生成分段HPROF堆转储时指定适当的段大小。

格式

-XX:HeapDumpSegmentSize = size [k | K] [m | M] [g | G]

实施例

java -XX:+HeapDumpOnOutOfMemory -XX:HeapDumpSegmentSize=512M myApp

默认值
1 GB

措施2 -XX:SegmentedHeapDumpThreshold

  

当堆使用量大于指定大小时,-XX:SegmentedHeapDumpThreshold选项会生成分段堆转储(.hprof文件,1.0.2格式)。

需要分段的HPROF转储格式才能正确生成包含4 GB以上数据的堆转储。如果-XX:SegmentedHeapDumpThreshold选项的值设置为大于4 GB,则可能无法正确生成堆转储。

格式
-XX:SegmentedHeapDumpThreshold = size

实施例

java -XX:SegmentedHeapDumpThreshold=512M myApp

默认值
2 GB

答案 1 :(得分:2)

确切失败消息的一个简单原因可能是:
转储目录中没有足够的空间。

如果未通过JVM参数-XX:HeapDumpPath(参见documentation)更改转储目录,则转储目录是当前工作目录。