JVM調優案例 11.26
集羣間同步導致的內存溢出
問題
一個B/S的MISS系統開啓JBossCache全局緩存後,不定期出現內存溢出的問題
原因
JBossCache在確認所有註冊在GMS的節點都收到正確信息前,發送的信息必須在內存中保留
MISS服務端的全局過濾器更新最後更新時間導致集羣各節點交互頻繁,當網絡情況不能滿足傳輸需求時,重發的數據在內存中不斷堆積很快產生了內存溢出
解決
JBossCache後續有改進可允許讀操作,不應當有過於頻繁的寫操作避免網絡同步的開銷
堆外內存導致的溢出錯誤
問題
基於B/S的電子考試系統服務端不定時拋出內存溢出異常
原因
一共2GB內存,1.6GB分給了堆內存,分給直接內存的少,可 ComeD 1.1.1 框架有大量NIO操作,使用到了直接內存,所以OOM了
解決
也要給直接內存分配合適的內存
直接內存
線程堆棧
Socket緩存區
JNI代碼
虛擬機和垃圾收集器