2013-03-03 32 views
2

我知道-XX:+HeapDumpOnOutOfMemoryError將在OutOfMemoryError上啓用堆轉儲。如何在內存不足錯誤時執行線程轉儲

有什麼類似的線程轉儲?我需要這個以防服務器發生錯誤時 - 我無法在發生時自行處理它

+0

您可以使用VisualVM做一個HeapDump,較新的Java版本可以在板上查看bin /文件夾。 – 2013-03-03 23:04:45

+0

在Unix中,SIGQUIT(無論是使用kill命令發送還是通過在程序控制臺中鍵入Ctrl- \)都會轉儲所有線程的堆棧跟蹤。在Windows中,程序控制臺中的Ctrl-Break將執行此操作。 – VGR 2013-03-03 23:10:25

回答

2

發生OutOfMemoryError的確切執行點非常多(除非您有單個線程應用程序) ,所以我認爲在OOM上獲得線程轉儲不會太有意義。至少這是真的,如果它是'Java堆空間'類的OOM,但也可能用於其他類型的OOM錯誤。

無論如何,看看this older post解決同樣的問題。

但是,解決OOM錯誤的更好方法是使用Eclipse Memory Analyzer Tool來檢查堆轉儲。它通過將對象圖轉換爲所謂的dominator tree來幫助您識別內存泄漏。這種結構揭示了對象之間的保持活動依賴關係,因此很容易識別負責保留最大內存塊的那些(見Shallow vs. Retained Heap)。

+0

感謝您的鏈接。我們正在使用服務包裝,我發現配置設置。否則,我會去異常處理程序解決方案。 – 2013-03-04 05:05:30

+0

上面的「舊帖子」提出:-XX:OnOutOfMemoryError =「kill -3%p」 – vorburger 2017-03-09 12:23:40