jvm內存溢出問題詳解

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

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

       可是總感覺哪不對,會不會再過幾個小時又出現問題,於是打開日誌仔細排查,最後竟然發現OOM………………。感覺很震驚。系統都已經運行了一年多了,怎麼可能?我仔細查看了當前服務器配置和部署的服務,發現當前服務器配置4核8G內存。總共部署了4個服務,內存分配如下:

     這已經佔用了6G內存,在加上系統本身佔用內存,顯然是不夠用的了。出問題系統是第一個,堆內存分配1G,元數據分配256M。

     所以判斷是當前服務分配內存不夠大,在調用其他服務超時,導致本身服務的積壓,堆內對象不能及時垃圾回收,進而使內存增長,產生OOM。

   問題基本找到了。現在解決辦法是升級當前服務內存,就把其他兩個系統訪問量不大的減少了內存,分配到出問題內存。多了0.5G,到寫本文的時候系統已經運行半天,還是正常,堆內存情況:


問題基本解決,不過還是調用三方服務時,設置超時時間要適當,超時或者服務有問題要快速返回。

 

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章