我们一直在努力诊断我们在生产服务器上遇到的OutOfMemoryError的原因。 我们在浸泡testing中重现问题的尝试迄今都失败了,我们正在考虑在生产服务器上启用-XX:+HeapDumpOnOutOfMemoryError
,所以如果它再次发生,至less我们会有一些数据。
在生产服务器上启用此设置是明智的吗?
看看文档:
B.1.2 -XX:+ HeapDumpOnOutOfMemoryError选项
-XX:+HeapDumpOnOutOfMemoryError
命令行选项告诉HotSpot VM在Java堆或永久生成的分配无法满足时生成堆转储。 使用此选项运行没有任何开销,因此对于OutOfMemoryError
需要很长时间才能显示的生产系统而言 , 它可能非常有用 。您还可以在运行时使用jconsole实用程序中的MBeans选项卡指定此选项。
堆转储
HPROF
二进制格式,因此可以使用任何可导入此格式的工具进行分析。 例如,jhat工具可以用来做转储的基本分析。 见2.5jhat
实用程序。
-XX:+HeapDumpOnOutOfMemoryError
标志不会在运行时引入性能或安全问题。 该标志只有在OutOfMemoryError
发生后才被检查。
您可以使用相应的-XX:HeapDumpPath
标志来指定保存文件的实际path。 (无论文件保存在哪里,请确保文件系统和/或Java进程具有必要的权限configuration以便能够在那里写入。)