有沒有辦法讓Java應用程序轉儲文件,其中包含有關JVM崩潰原因的信息?獲取有關JVM崩潰的信息
回答
如果你不意味着實際JVM崩潰了程序錯誤,但更多的,你有這帶來了你的程序下來意外的是,你可以在你的主要方法使用一個try-catch異常:
public static void main(String args[]) {
try {
doStuff();
} catch (Throwable e) {
e.printStackTrace();
logStuff(e);
}
}
這將捕獲任何種類的'Error',包括'OutOfMemoryError',它本身需要一些內存來處理...聽起來對我來說是個壞主意。 – whiskeysierra 2010-09-22 07:24:41
有更好的建議呢? – 2010-09-22 07:52:41
Willi,無論如何處理OutOfMemoryError都需要內存? – Will 2010-09-22 17:32:44
可以使用DebugDiag工具或IBM Memory Analyzer。後者有很多教程。希望這可以幫助。
在jdk中,您有一個名爲jmap的工具來轉儲內存並分析對象。
如果它結束了,你將如何轉儲?我想我可以在最後添加一個Thread.Sleep,但有沒有更好的方法? – Will 2010-09-22 16:22:16
對不起,我沒有任何其他的想法。 – 2010-09-22 18:57:20
如果JVM由於本機代碼錯誤(即通過JNI訪問的代碼 - 不一定是JVM本身)中的錯誤而崩潰,則JVM(通常)會生成堆轉儲。默認情況下,它是在JVM的工作目錄中的一個名爲hs_err_pidXXXX.log
的文件中創建的(XXXX
是進程ID)。
如果您的意思是來自Java程序本身的崩潰,here是一篇關於如何爲未捕獲的異常設置處理程序的好文章。然後您可以將它們(和關聯的堆棧跟蹤)記錄到文件中。
如果異常被未記錄的try/catch處理並處理,該怎麼辦?有什麼辦法可以獲得線程拋出的最後一個java異常? – Will 2010-09-22 14:35:38
@高:我不認爲有。 try/catch塊負責處理異常並適當地執行操作(例如:取消操作和/或記錄某些內容)。這就是爲什麼人們(幾乎)不會使用空的catch塊。但即使「吞嚥」異常也不會導致JVM崩潰或線程死亡。只有未捕獲的異常可以這樣做。 – 2010-09-23 07:50:39
- 1. 如何從核心文件獲取有關崩潰的信息?
- 2. IOS - 意外崩潰,無崩潰信息
- 3. GCTaskThread JVM崩潰
- 4. JpCapWriter崩潰JVM
- 5. iOS應用崩潰而崩潰日誌還沒有相關的信息
- 6. SceneKit崩潰而沒有詳細的崩潰信息
- 7. JVM崩潰:與java.awt.Graphics的關係?
- 8. 我可以從這樣的崩潰信息中獲得有用的信息嗎?
- 9. JVM崩潰EXCEPTION_ACCESS_VIOLATION(0xc0000005)
- 10. JVM偶爾崩潰
- 11. JBoss/HotSpot JVM崩潰
- 12. JVM突然崩潰
- 13. JVM隨機崩潰
- 14. VBA宏崩潰沒有錯誤信息
- 15. SDL_MapRGB崩潰,沒有錯誤信息
- 16. 崩潰,沒有錯誤信息
- 17. 無信息崩潰報告
- 18. 獲取有關YouTube視頻的信息
- 19. WooCommerce獲取有關訂單的信息
- 20. 獲取有關繼承鏈的信息
- 21. 獲取有關numpy dtype的信息
- 22. 獲取有關splayd的信息
- 23. API來獲取有關URL的信息
- 24. 獲取有關WiFi網絡的信息
- 25. buildLoadSettings,獲取有關引用的信息
- 26. 獲取有關jboss的信息
- 27. 內核崩潰後獲取linux內核調試信息
- 28. ConnectivityManager在獲取網絡信息時崩潰了
- 29. 獲取崩潰日誌,從android用戶調試信息?
- 30. 在iOS崩潰報告中獲取線程特定信息?
好問題,但你打算怎麼辦?你是JVM開發人員嗎?如果* JVM *崩潰,那麼JVM就會出錯。下面是一個(1K視圖)問題,我問了如何處理可以隨意觸發的可重複JVM崩潰:http://stackoverflow.com/questions/2299250 – SyntaxT3rr0r 2010-09-22 02:14:42
我正在處理java字節碼。看起來,當有一個無效的函數java喜歡崩潰沒有警告。這可能是錯誤正在某處處理。反正有沒有得到線程拋出的最後一個java異常? – Will 2010-09-22 13:48:06