1. 程式人生 > >OSSClient不關閉,導致大量FullGC

OSSClient不關閉,導致大量FullGC

我們先看下現象

線上有臺伺服器,每次重啟,執行一段時間後,就會出現大量FGC,如下圖:

通過jmap命令,匯出了jvm堆中所有物件的佔用情況,jmap -histo 應用的pid>a.log,如下:

       從第一張圖,我們可以看出,jvm中有些物件,因為申請的記憶體,一直沒有釋放,導致OLD區逐漸的變大,直到頻繁的FGC發生,即記憶體洩漏

      從第二張圖,排行前35中,基本都是基礎型別和java、apache、sun的包,只有一個是aliyun的類,而且這個配置類,看第二列,例項數(instances),理論上不可能會達到1W8的客戶端同時在連線,再看那些HttpClientBuilder、SocksSocketImpl這些都是與網路請求有關的,OSS的上傳也是需要這些,而且數量上,都是在1W8左右

     後面去看過程式碼,每次上傳檔案到OSS,服務端都是採用先獲取授權令牌,然後new OSSClient()去開啟一個上傳客戶端連線,但是後面沒有關閉,初步斷定是這個地方的問題,隨即增加了 ossClient.shutdown();

      上線後數日內,為了防止節假日出問題,還專門調大了xms和xmx,基本情況如下:

 問題已經解決了,記憶體也不需要那麼大,最後要提醒下大家,用完一定要關閉,很重要!!!

ossClient.shutdown();