排查線上內存泄漏,RingBufferLogEvent類內存占用過高,skyWalking內存占用過高


項目運行了一段時間 運維那邊反饋項目內存過高,首先我們把線上的jvm內存文件導出來,來看看哪些對象有問題 , 我這邊演示就在windows中的cmd演示了  因為jdk提供的命令都一樣

1查看java進程  命令: jps-l

可以看到我們的java進程id是 149992

 

 

2導出內存文件到本地,如果是在服務器中需要把文件 下載到本地做分析

 命令:jmap -dump:format=b,file=heapdump.phrof  149992(jvm進程id)

 

可以看到 我們的內存文件以 phrof結尾,已經下載到我們的C:\Users\Adminstrator\下

3使用eclipse分析我們的內存文件,

首先我們要下載一個eclipse軟件  接下來我們要在eclipse軟件中安裝一個插件來分析,這個插件是 Eclipse Memory Analyzer(MAT),

我們打開 eclipse 中工具欄的 Help-》Install New Software  如下圖所示

 

 我們點擊 Add按鈕 輸入以下配置

 

 經過一系列的安裝,安裝成功后 我們打開Memory Analysis 內存分析工具

 

 然后把我們的內存文件 拖拽到空白處如下圖所示:

 

 會出現一個提示框  如下圖:

內存文件可視化圖就出現了

 

 我們來了解一下底部的信息, 是什么意思 如何分析

1.Histogram可以列出內存中的對象,對象的個數以及大小。
2. Dominator Tree可以列出那個線程,以及線程下面的那些對象占用的空間。
3.Top consumers通過圖形列出最大的object。
4.Leak Suspects通過MA自動分析泄漏的原因。

分析:

Histogram如下圖:

Objects:類的對象的數量;

Shallow size:就是對象本身占用內存的大小,不包含對其他對象的引用,也就是對象頭加成員變量(不是成員變量的值)的總和;

Retained size:是該對象自己的shallow size,加上從該對象能直接或間接訪問到對象的shallow size之和。換句話說,retained size是該對象被GC之后所能回收到內存的總和。

 

4具體分析:

 4.1我們通過Histogram分析 可以看到這個對象占用了很多內存,空間

 

 4.2 我們通過線程分析Dominator Tree 可以看到線程當中占用最多的線程中的類

 

 4.3 我們通過 MA自動分析漏洞原因

 

 總結:

,com.lmax.disruptor.RingBuffer類來自於skyWalking jar包中

 

 導致內存過高,卸扣的是skyWalking

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM