Java
在生產中使用 HeapDumpOnOutOfMemoryError 是否合適?
我們一直在努力診斷我們在其中一台生產伺服器上遇到的 OutOfMemoryError 的原因。到目前為止,我們在浸泡測試中重現該問題的嘗試都失敗了,我們正在考慮
-XX:+HeapDumpOnOutOfMemoryError
在我們的生產伺服器上啟用,這樣如果它再次發生,至少我們會有一些數據。在生產伺服器上啟用此設置是否明智?
查看文件:
B.1.2 -XX:+HeapDumpOnOutOfMemoryError 選項
當
-XX:+HeapDumpOnOutOfMemoryError
無法滿足來自 Java 堆或永久代的分配時,命令行選項告訴 HotSpot VM 生成堆轉儲。使用此選項執行沒有成本,因此它對於需要很長時間才能浮出水面的生產系統非常有用。OutOfMemoryError
您還可以在執行時使用 jconsole 實用程序中的 MBeans 選項卡指定此選項。
堆轉儲是
HPROF
二進制格式,因此可以使用任何可以導入此格式的工具對其進行分析。例如,jhat 工具可用於對轉儲進行初步分析。
-XX:+HeapDumpOnOutOfMemoryError
flag 不會在執行時引入性能或安全問題。OutOfMemoryError
只有在發生後才檢查標誌。
-XX:HeapDumpPath
您可以使用相應的標誌指定保存文件的實際路徑。(無論文件保存在哪裡,請確保文件系統和/或 Java 程序具有必要的權限配置以便能夠在那裡寫入。)