一次fullgc問題分析總結


一 現象:

頁面卡死,影響時長:約10min

二 排查:

1 收到報警郵件,查看日志報如下log:

Caused by: java.lang.OutOfMemoryError: Java heap space
java.lang.OutOfMemoryError: Java heap space
2 查看cpu,發現cpu跑滿了,查看GC的LOG 發現一直在fullGC,頻率評價是每2秒一次,每次停頓時間大約2.5s

3 查看業務日志log:

發現一直在報dubbo調上游接口根據組織批量查詢下面人員信息超時

三 原因:

報表下載導致的

分析過程:下載報表邏輯是根據傳入組織參數:比如某個公司,獲取該公司下的所有子組織,以及全部子組織下的人,查出全量流水和全量人員,然后根據組織參數和時間段參數過濾得到想要的流水寫入excel導出。問題出現在 :獲取該公司下的所有子組織(可能會很多達到幾萬個)以及全部子組織下的人,調上游人事系統接口dubbo超時,方法的棧楨不能及時退出,大量對象引用一直存在,導致對象所占的空間不能及時通過gc回收,不斷積壓,導致內存泄露,頻繁fullGC,stop the world,系統停頓,每次停頓時間大約2.5s,同時cpu飆升跑滿,系統卡死,頁面無反應。

四 改進方案:

1 減少本地緩存,不要過於依賴本地緩存,只可把高頻少量的數據放入本地緩存,無論是跑批還是報表減少對上游依賴,可以只跑增量數據,減少無用數據的跑批

2 查數據增加分頁控制,控制單次觸發不會占用過多內存,就可以增加下載報表並發進行數量

3 報表接入大數據平台,從業務代碼中剝離

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM