案例1: Dynatrace分析某財險承保系統內存泄漏問題

文檔屬性

此文檔由東風微鳴編寫。
未經許可,不得向個人或機構傳閱或複製

修改記錄

日期 作者 版本 修改記錄
2017/3/10 東風微鳴 V1.0 創建文檔
2017/10/29 東風微鳴 V1.1 格式調整

審閱記錄

審閱人 職位

分發記錄

拷貝No. 姓名 單位
1
2
3

參考文件

參考文件

一 內存泄漏情況說明

今天使用Dynatrace檢查發現callCenter的應用存在內存泄漏的情況。具體如下:
在過去6H內,OLD區內存使用量在持續增長,最終達到99.98%。且大部分OLD區內存無法GC。同時因頻繁GC,導致JVM “STOP THE WORLD”的時間越來越大。嚴重影響業務性能。

對業務性能的影響如下圖所示:

折線圖是不包含掛起(stop the world)的響應時間,柱狀圖是包含掛起的響應時間。可以看到對業務的響應時間造成了一定的影響。

二 內存泄漏分析

使用Dynatrace分析結果如下:

  1. 確實存在內存泄漏。(相關資料可以在Dynatrace的下列路徑中查看分析結果)
  2. 泄漏的實例主要是ConcurrentHashMap”dubboLruCacheConcurrentHashMap也是dubboLRUcache調用的)如下圖:
  3. 泄漏的根源如下:com.alibaba.dubbo.common.extension.ExtensionLoadercom.alibaba.dubbo.cache.support.lru.LruCacheFactory
  4. LRU類的相關細節如下:

三 總結

綜上,dubbo的LRU相關的類導致了內存泄漏。

可能的原因有:LRU緩存的cache size大小有問題;expire時間有問題;或者是相關cache一直存在引用,導致無法GC。

還請優化相關代碼,避免出現內存泄漏的情況。

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