您好,登錄后才能下訂單哦!
JVM 發生內存溢出的原因以及解決辦法是怎樣的,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
發生頻率:5顆星
造成原因
無法在 Java 堆中分配對象
吞吐量增加
應用程序無意中保存了對象引用,對象無法被 GC 回收
應用程序過度使用 finalizer。finalizer 對象不能被 GC 立刻回收。finalizer 由結束隊列服務的守護線程調用,有時 finalizer 線程的處理能力無法跟上結束隊列的增長
解決方案
使用 -Xmx 增加堆大小
修復應用程序中的內存泄漏
發生頻率:5顆星
造成原因
Java 進程98%的時間在進行垃圾回收,恢復了不到2%的堆空間,最后連續5個(編譯時常量)垃圾回收一直如此。
解決方案
使用 -Xmx 增加堆大小
使用 -XX:-UseGCOverheadLimit 取消 GC 開銷限制
修復應用程序中的內存泄漏
發生頻率:2顆星
造成原因
應用程序試圖分配一個超過堆大小的數組
解決方案
使用 -Xmx 增加堆大小
修復應用程序中分配巨大數組的 bug
發生頻率:3顆星
造成原因
Perm gen 空間包含:
類的名字、字段、方法
與類相關的對象數組和類型數組
JIT 編譯器優化
當 Perm gen 空間用盡時,將拋出異常。
解決方案
使用 -XX: MaxPermSize 增加 Permgen 大小
不重啟應用部署應用程序可能會導致此問題。重啟 JVM 解決
發生頻率:3顆星
造成原因
從 Java 8 開始 Perm gen 改成了 Metaspace,在本機內存中分配 class 元數據(稱為 metaspace)。如果 metaspace 耗盡,則拋出異常
解決方案
通過命令行設置 -XX: MaxMetaSpaceSize 增加 metaspace 大小
取消 -XX: maxmetsspacedize
減小 Java 堆大小,為 MetaSpace 提供更多的可用空間
為服務器分配更多的內存
可能是應用程序 bug,修復 bug
發生頻率:5顆星
造成原因
內存不足,無法創建新線程。由于線程在本機內存中創建,報告這個錯誤表明本機內存空間不足
解決方案
為機器分配更多的內存
減少 Java 堆空間
修復應用程序中的線程泄漏。
增加操作系統級別的限制
ulimit -a
用戶進程數增大 (-u) 1800
使用 -Xss 減小線程堆棧大小
發生頻率:1顆星
造成原因
內核任務:內存不足結束器,在可用內存極低的情況下會殺死進程
解決方案
將進程遷移到不同的機器上
給機器增加更多內存
與其他 OOM 錯誤不同,這是由操作系統而非 JVM 觸發的。
發生頻率:1顆星
造成原因
本機方法(native method)分配失敗
打印的堆棧跟蹤信息,最頂層的幀是本機方法
解決方案
使用操作系統本地工具進行診斷
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。