頻繁發生fullgc的原因和定位思路

2022-07-03 06:33:13 字數 976 閱讀 1965

1. 機器 cpu 負載過高

2. 頻繁 full gc 告警

3. 系統無法請求處理或者過慢, 介面無關 全面性的

出現以上異常的時候,要第一時間反應過來可能是 full gc的問題

full gc 觸發條件是 老年代空間不足, 所以追因的方向就是導致 老年代空間不足的原因:

大量物件頻繁進入老年代 + 老年代空間釋放不掉

系統併發高、執行耗時過長,或者資料量過大,導致 young gc頻繁,且gc後存活物件太多,但是survivor 區存放不下(太小 或 動態年齡判斷) 導致物件快速進入老年代 老年代迅速堆滿

發程式一次性載入過多物件到記憶體 (大物件),導致頻繁有大物件進入老年代 造成full gc

存在記憶體溢位的情況,老年代駐留了大量釋放不掉的物件, 只要有一點點物件進入老年代 就達到 full gc的水位了

元資料區載入了太多類 ,滿了 也會發生 full gc

堆外記憶體 direct buffer memory 使用不當導致

也許, 你看到老年代記憶體不高 重啟也沒用 還在頻繁發生full gc, 那麼可能有人作妖,在**裡搞執行了 system.gc();

如果有監控,那麼通過圖形能比較直觀、快速的了解gc情況;

如果沒有監控,那麼只能看gc日誌或jstat來分析 這是基本技能 一定要熟練

觀察年輕代 gc的情況,多久執行一次、每次gc後存活物件有多少 survivor區多大

存活物件比較多 超過survivor區大小或觸發動態年齡判斷 => 調整記憶體分配比例

觀察老年代的記憶體情況 水位情況,多久執行一次、執行耗時多少、**掉多少記憶體

如果在持續的**,而且full gc後**效果不好,那麼很有可能是記憶體溢位了 => dump 排查具體是什麼玩意

如果年輕代和老年代的記憶體都比較低,而且頻率低 那麼又可能是元資料區載入太多東西了

其實如果是自己負責的系統,可能要看是不是發版改了什麼配置、**

學習了!頻繁發生FullGC問題排查手段

如題,機器發生頻繁fullgc報警,如何定位原因?一般現象為cpu飆高,rt增加,另外很可能出現oom。當碰到這種現象時,如何定位 列印heap的概要資訊,gc使用的演算法,heap 堆 的配置及jvm堆記憶體的使用情況.jmap heap pid列印每個class的例項數目,記憶體占用,類全名資訊...

fullGC過於頻繁的原因和解決方案

2016年04月10日 23 02 43 系統高峰期fullgc頻繁,優化後恢復正常。導致原因 系統中有乙個呼叫頻繁的介面會呼叫下面這個方法,目的是獲取的寬高資訊,但是image這個物件用完不會自動釋放,需要手動呼叫 flush 方法 以前沒有呼叫這個方法,就導致一有請求就會有大物件進入old區,在...

把脈你的離職原因,避免頻繁跳槽

跳槽是個人行為,原則上,它應該是屬於每個人的自由。但是,跳槽真的就是說走就走那麼簡單嗎?你這份工作真的不適合你,還是你還沒有適應如今的職場?根據前程無憂 2015年個人跳槽意願度報告 中顯示,對薪資不滿 職業發展遇到瓶頸 企業發展不佳 無法認同企業的管理或文化成為大家跳槽的主要原因。見下圖 那這些原...