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

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

我们一直在努力诊断我们的一台生产服务器上遇到的 OutOfMemoryError 的原因。我们在浸泡测试中重现此问题的尝试迄今为止都失败了,我们正在考虑-XX:+HeapDumpOnOutOfMemoryError在生产服务器上启用此功能,这样如果再次发生这种情况,至少我们还有一些数据。

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

答案1

看看文档

B.1.2 -XX:+HeapDumpOnOutOfMemoryError 选项

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

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

堆转储是HPROF二进制格式的,因此可以使用任何可以导入此格式的工具进行分析。例如,可以使用 jhat 工具对转储进行初步分析。

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

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

相关内容