文檔屬性
此文檔由東風微鳴編寫。
未經許可,不得向個人或機構傳閱或複製
修改記錄
日期 | 作者 | 版本 | 修改記錄 |
---|---|---|---|
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分析結果如下:
- 確實存在內存泄漏。(相關資料可以在Dynatrace的下列路徑中查看分析結果)
- 泄漏的實例主要是
ConcurrentHashMap”
和dubbo的LruCache
(ConcurrentHashMap
也是dubbo的LRUcache
調用的)如下圖:
- 泄漏的根源如下:
com.alibaba.dubbo.common.extension.ExtensionLoader
和com.alibaba.dubbo.cache.support.lru.LruCacheFactory
- LRU類的相關細節如下:
三 總結
綜上,dubbo的LRU相關的類導致了內存泄漏。
可能的原因有:LRU緩存的cache size大小有問題;expire時間有問題;或者是相關cache一直存在引用,導致無法GC。
還請優化相關代碼,避免出現內存泄漏的情況。