如何解決JVM OutOfMemoryError記憶體洩漏問題?
沒有任何神奇的工具可以為您修復OutOfMemoryError,但是下面有一些選項可以幫助您自動排除故障並確定根本原因。按照以下三個步驟來處理此JVM記憶體錯誤並開始恢復:
- 捕獲JVM堆轉儲
- 重啟應用程式
- 診斷問題
1.捕獲堆轉儲
堆轉儲是在指定時間點J內ava程式記憶體中的內容的快照。它包含有關儲存器中存在的物件的詳細資訊,這些物件中存在的實際資料,這些物件如何維護到其他物件以及其他資訊。堆轉儲是修復OutOfMemoryError的重要步驟,但它們確實存在一些挑戰,因為它們的內容可能難以閱讀和解密。
在最佳情況下,您希望在OutOfMemoryError之前或之前捕獲堆轉儲以診斷原因,但這並不容易。但是,您可以自動執行此堆轉儲過程。通過使用以下變數編輯JRE的啟動引數,告訴JVM建立堆轉儲:
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/crashes/my-heap-dump.hprof |
2.重新啟動麻煩的應用程式
大多數情況下,OutOfMemoryError不會使應用程式崩潰,但它可能會使應用程式處於不穩定狀態。在這種情況下重啟將是一種謹慎的舉動,因為不穩定的應用程式例項提供的請求會導致錯誤的結果。
您也可以自動執行此重啟過程。只需編寫一個“restart-myapp.sh”指令碼,它會重啟您的應用程式。向JVM提供命令列引數,以便在遇到異常時觸發它以執行以下指令碼:
-XX:OnOutOfMemoryError=/scripts/restart-myapp.sh |
傳遞此引數時,只要丟擲OutOfMemoryError,JVM就會呼叫“/scripts/restart-myapp.sh”指令碼。因此,您的應用程式將在遇到OutOfMemoryError後立即自動重新啟動。
3.診斷問題
現在您已經捕獲了堆轉儲 - 這是解決問題所需的 - 並重新啟動應用程式 - 以減少中斷影響 - 下一步是故障排除。
如上所述,理解堆轉儲的內容可能很棘手,但有一些有用的堆分析器工具可以幫助簡化流程。一些選項包括Eclipse Memory Analyzer(MAT),Oracle JHat或HeapHero。
這些工具生成記憶體分析報告,突出顯示導致最大記憶體的物件,並希望幫助識別導致記憶體洩漏的物件。
當您的應用程式遇到執行時錯誤時,這會非常令人沮喪。您需要耐心,記憶體堆轉儲以及分析問題的適當工具來修復OutOfMemoryError以及類似類似的其他令人討厭的異常。
相關文章
- JVM——記憶體洩漏與記憶體溢位JVM記憶體溢位
- 解決記憶體洩漏(1)-ApacheKylin InternalThreadLocalMap洩漏問題分析記憶體Apachethread
- ThreadLocal記憶體洩漏問題thread記憶體
- AFN的記憶體洩漏問題記憶體
- JVM與記憶體洩露問題JVM記憶體洩露
- iOS八種記憶體洩漏問題iOS記憶體
- iOS 11 textField記憶體洩漏問題iOS記憶體
- bea記憶體洩漏問題診斷記憶體
- HibernateDaoSupport 記憶體洩漏的問題!記憶體
- 記憶體洩漏問題分析之非託管資源洩漏記憶體
- 關於PHP記憶體洩漏的問題PHP記憶體
- 記憶體洩漏記憶體
- handlder引起的記憶體洩漏問題以及解決辦法記憶體
- 安卓6.0記憶體洩漏問題仍在 再不解決就晚了!安卓記憶體
- Java記憶體洩漏解決之道Java記憶體
- 分析記憶體洩漏和goroutine洩漏記憶體Go
- 【Java面試題】之記憶體洩漏Java面試題記憶體
- js記憶體洩漏JS記憶體
- Java記憶體洩漏Java記憶體
- webView 記憶體洩漏WebView記憶體
- Javascript記憶體洩漏JavaScript記憶體
- 記憶體洩漏引起的 資料庫效能問題記憶體資料庫
- Handler記憶體洩漏分析及解決記憶體
- Handler的使用、記憶體洩漏和解決記憶體
- 記憶體分析與記憶體洩漏定位記憶體
- 記憶體洩漏和記憶體溢位記憶體溢位
- 解決git記憶體洩露問題Git記憶體洩露
- 分析ThreadLocal的弱引用與記憶體洩漏問題thread記憶體
- 對於記憶體洩漏問題的簡單認知記憶體
- C++--問題27--如何檢測記憶體洩漏C++記憶體
- 我是如何搞定 NodeJS 記憶體洩漏問題的NodeJS記憶體
- valgrind 記憶體洩漏分析記憶體
- Android 記憶體洩漏Android記憶體
- Android記憶體洩漏Android記憶體
- 淺談記憶體洩漏記憶體
- 記憶體洩漏的原因記憶體
- JavaScript 記憶體洩漏教程JavaScript記憶體
- 說說 記憶體洩漏記憶體