情景:線上服務突然宕機,檢查日志發現只有這個異常會導致。
分析:線上沒有死循環程序,不知道什么原因造成GC問題,最后解決辦法是增大了服務的運行內存
第二天分析gc的原因
異常對性能不利。拋出異常首先要創建一個新的對象,Throwable接口的構造函數調用名為fillInStackTrace()的本地同步方法,fillInStackTrace()方法檢查堆棧,收集調用跟蹤信息。只要有異常被拋出,Java虛擬機就必須調整調用堆棧,因為在處理過程中創建了一個新的對象。異常只能用於錯誤處理,不應該用來控制程序流程。
‘GC overhead limit exceeded’官方解釋:‘並行/並發回收器在GC回收時間過長時會拋出OutOfMemroyError。過長的定義是,超過98%的時間用來做GC並且回收了不到2%的堆內存。用來避免內存過小造成應用不能正常工作。’
應該是程序異常太多,不停觸發GC的預測策略,加速了OOM的出現。