我们一直在努力诊断我们的一台生产服务器上遇到的 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 进程具有必要的权限配置,以便能够在那里写入。)