1. Java 堆空間
發(fā)生頻率:5顆星
造成原因
無法在 Java 堆中分配對象
為云溪等地區(qū)用戶提供了全套網頁設計制作服務,及云溪網站建設行業(yè)解決方案。主營業(yè)務為成都網站設計、做網站、云溪網站設計,以傳統(tǒng)方式定制建設網站,并提供域名空間備案等一條龍服務,秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!
吞吐量增加
應用程序無意中保存了對象引用,對象無法被 GC 回收
- 應用程序過度使用 finalizer。finalizer 對象不能被 GC 立刻回收。finalizer 由結束隊列服務的守護線程調用,有時 finalizer 線程的處理能力無法跟上結束隊列的增長
解決方案
單位對應:GB -> G, g;MB -> M, m;KB -> K, k
使用?-Xmx?增加堆大小
- 修復應用程序中的內存泄漏
2. GC 開銷超過限制
發(fā)生頻率:5顆星
造成原因
- Java 進程98%的時間在進行垃圾回收,恢復了不到2%的堆空間,最后連續(xù)5個(編譯時常量)垃圾回收一直如此。
解決方案
使用?-Xmx?增加堆大小
使用?-XX:-UseGCOverheadLimit?取消 GC 開銷限制
- 修復應用程序中的內存泄漏
3. 請求的數組大小超過虛擬機限制
發(fā)生頻率:2顆星
造成原因
- 應用程序試圖分配一個超過堆大小的數組
解決方案
使用?-Xmx?增加堆大小
- 修復應用程序中分配巨大數組的 bug
4. Perm gen 空間
發(fā)生頻率:3顆星
造成原因
Perm gen 空間包含:
類的名字、字段、方法
與類相關的對象數組和類型數組
- JIT 編譯器優(yōu)化
當 Perm gen 空間用盡時,將拋出異常。
解決方案
使用?-XX: MaxPermSize?增加 Permgen 大小
- 不重啟應用部署應用程序可能會導致此問題。重啟 JVM 解決
5. Metaspace
發(fā)生頻率:3顆星
造成原因
- 從 Java 8 開始 Perm gen 改成了 Metaspace,在本機內存中分配 class 元數據(稱為 metaspace)。如果 metaspace 耗盡,則拋出異常
解決方案
通過命令行設置?-XX: MaxMetaSpaceSize?增加 metaspace 大小
取消?-XX: maxmetsspacedize
減小 Java 堆大小,為 MetaSpace 提供更多的可用空間
為服務器分配更多的內存
- 可能是應用程序 bug,修復 bug
6. 無法新建本機線程
發(fā)生頻率:5顆星
造成原因
- 內存不足,無法創(chuàng)建新線程。由于線程在本機內存中創(chuàng)建,報告這個錯誤表明本機內存空間不足
解決方案
為機器分配更多的內存
減少 Java 堆空間
修復應用程序中的線程泄漏。
- 增加操作系統(tǒng)級別的限制
ulimit -a
- 用戶進程數增大?(-u) 1800
- 使用?-Xss?減小線程堆棧大小
7. 殺死進程或子進程
發(fā)生頻率:1顆星
造成原因
- 內核任務:內存不足結束器,在可用內存極低的情況下會殺死進程
解決方案
將進程遷移到不同的機器上
- 給機器增加更多內存
與其他 OOM 錯誤不同,這是由操作系統(tǒng)而非 JVM 觸發(fā)的。
8. 發(fā)生 stack_trace_with_native_method
發(fā)生頻率:1顆星
造成原因
本機方法(native method)分配失敗
- 打印的堆棧跟蹤信息,最頂層的幀是本機方法
解決方案
使用操作系統(tǒng)本地工具進行診斷
本文題目:一文了解OOM及解決方案
文章出自:
http://weahome.cn/article/ihhdsh.html