XX:+堆转储内存不足错误 最大文件大小限制



我正在运行一个带有 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

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

-XX:+HeapDumpOnOutOfMemoryError命令行

选项告知 HotSpot VM 在无法满足 Java 堆或永久生成的分配时生成堆转储。使用此选项运行不会产生任何开销,因此对于内存不足错误需要很长时间才能浮出水面的生产系统非常有用。

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

措施1:XX:堆转储段大小

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

格式

-XX:堆转储段大小=大小[k|K][m|M][g|G]

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


默认值1 千兆字节

措施2-XX:分段堆转储阈值

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

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

格式
-XX:分段堆转储阈值=大小

java -XX:SegmentedHeapDumpThreshold=512M myApp


默认值2 千兆字节

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

如果未通过 JVM 参数 -XX:HeapDumpPath 进行更改,则转储目录是当前工作目录(请参阅文档)。

最新更新