如何解決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記憶體
- JVM——記憶體洩漏與記憶體溢位JVM記憶體溢位
- redisson記憶體洩漏問題排查Redis記憶體
- 記憶體洩漏問題分析之非託管資源洩漏記憶體
- BufferedImage記憶體洩漏和溢位問題記憶體
- 關於PHP記憶體洩漏的問題PHP記憶體
- Java記憶體洩漏解決之道Java記憶體
- 分析記憶體洩漏和goroutine洩漏記憶體Go
- 分析ThreadLocal的弱引用與記憶體洩漏問題thread記憶體
- 記憶體洩漏引起的 資料庫效能問題記憶體資料庫
- Android 記憶體洩漏Android記憶體
- Java記憶體洩漏Java記憶體
- js記憶體洩漏JS記憶體
- Android記憶體洩漏Android記憶體
- Java動態編譯優化——URLClassLoader 記憶體洩漏問題解決Java編譯優化記憶體
- Handler記憶體洩漏分析及解決記憶體
- Android 輕鬆解決記憶體洩漏Android記憶體
- Handler的使用、記憶體洩漏和解決記憶體
- 解決git記憶體洩露問題Git記憶體洩露
- C++--問題27--如何檢測記憶體洩漏C++記憶體
- 對於記憶體洩漏問題的簡單認知記憶體
- Java動態編譯優化——ZipFileIndex記憶體洩漏問題分析解決Java編譯優化Index記憶體
- valgrind 記憶體洩漏分析記憶體
- 記憶體洩漏的原因記憶體
- Handler記憶體洩漏原因及解決方案記憶體
- 【記憶體洩漏和記憶體溢位】JavaScript之深入淺出理解記憶體洩漏和記憶體溢位記憶體溢位JavaScript
- 使用 Chrome Dev tools 分析應用的記憶體洩漏問題Chromedev記憶體
- MAT工具定位分析Java堆記憶體洩漏問題方法Java記憶體
- JVM 常見線上問題 → CPU 100%、記憶體洩露 問題排查JVM記憶體洩露
- 解決Instruments檢測記憶體洩漏時真機無法定位的問題記憶體
- 阿里二面:談談ThreadLocal的記憶體洩漏問題?問麻了。。。。阿里thread記憶體
- 記憶體洩漏除錯工具記憶體除錯
- ThreadLocal真會記憶體洩漏?thread記憶體
- WebView引起的記憶體洩漏WebView記憶體
- Perfdog 玩轉記憶體洩漏記憶體
- .Net程式記憶體洩漏解析記憶體