在生产中使用HeapDumpOnOutOfMemoryError是否合适?

我们一直在努力诊断我们在生产服务器上遇到的OutOfMemoryError的原因。 我们在浸泡testing中重现问题的尝试迄今都失败了,我们正在考虑在生产服务器上启用-XX:+HeapDumpOnOutOfMemoryError ,所以如果它再次发生,至less我们会有一些数据。

在生产服务器上启用此设置是明智的吗?

看看文档:

B.1.2 -XX:+ HeapDumpOnOutOfMemoryError选项

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

您还可以在运行时使用jconsole实用程序中的MBeans选项卡指定此选项。

堆转储HPROF二进制格式,因此可以使用任何可导入此格式的工具进行分析。 例如,jhat工具可以用来做转储的基本分析。 见2.5 jhat实用程序。

-XX:+HeapDumpOnOutOfMemoryError标志不会在运行时引入性能或安全问题。 该标志只有在OutOfMemoryError发生后才被检查。

您可以使用相应的-XX:HeapDumpPath标志来指定保存文件的实际path。 (无论文件保存在哪里,请确保文件系统和/或Java进程具有必要的权限configuration以便能够在那里写入。)