天天看點

jvm記憶體溢出問題詳解

      你好,歡迎閱讀本文,希望對你有幫助

       前些天線上某系統通路異常,出現卡的現象,并且一天出現了兩次。第一次排查到調用三方服務響應異常,通知三方服務負責人員排查問題。我對本系統的處理就是重新開機了一下,觀察半小時系統一切正常,就去忙其他的了。可是……過了4個小時左右又出現卡頓,系統打不開的情況。再次打開日志,第一眼看到的還是調用三方服務逾時,并且還是調用多個都逾時,沒有第一時間懷疑是自己系統問題,就又通知三方服務負責同僚排查。再次重新開機下系統先解決問題。問題下圖:

jvm記憶體溢出問題詳解

       可是總感覺哪不對,會不會再過幾個小時又出現問題,于是打開日志仔細排查,最後竟然發現OOM………………。感覺很震驚。系統都已經運作了一年多了,怎麼可能?我仔細檢視了目前伺服器配置和部署的服務,發現目前伺服器配置4核8G記憶體。總共部署了4個服務,記憶體配置設定如下:

jvm記憶體溢出問題詳解

     這已經占用了6G記憶體,在加上系統本身占用記憶體,顯然是不夠用的了。出問題系統是第一個,堆記憶體配置設定1G,中繼資料配置設定256M。

     是以判斷是目前服務配置設定記憶體不夠大,在調用其他服務逾時,導緻本身服務的積壓,堆内對象不能及時垃圾回收,進而使記憶體增長,産生OOM。

   問題基本找到了。現在解決辦法是更新目前服務記憶體,就把其他兩個系統通路量不大的減少了記憶體,配置設定到出問題記憶體。多了0.5G,到寫本文的時候系統已經運作半天,還是正常,堆記憶體情況:

jvm記憶體溢出問題詳解

問題基本解決,不過還是調用三方服務時,設定逾時時間要适當,逾時或者服務有問題要快速傳回。

謝謝閱讀,伺服器運作情況會繼續跟蹤,如果新問題會及時分享。