jvm內(nèi)存泄漏問題排查分析筆記

當(dāng)發(fā)現(xiàn)服務(wù)器可能存在內(nèi)存泄漏時(怎么發(fā)現(xiàn)捺氢?頻繁gc但是堆內(nèi)存降不下來剪撬,進(jìn)程內(nèi)存爆了就有可能是發(fā)生內(nèi)存泄漏了),怎么去定位發(fā)生的原因以及解決的方法馍佑。

首先梨水,在分析內(nèi)存前可以先通過代碼猜測一下可能存在內(nèi)存泄漏的部分疫诽,因為線上要想拿到dump下來的出問題的服務(wù)器的內(nèi)存文件一般會耗時很久,這個時間我們可以通過分析最近的版本更新內(nèi)容雏亚、或者有沒有新添加的代碼導(dǎo)致了內(nèi)存泄漏摩钙,這個可以通過查看svn或者git的提交,內(nèi)存泄漏的問題也可能是跨版本的网持,比如更新的版本1出現(xiàn)的內(nèi)存泄漏,但是內(nèi)存增長很緩慢谬返,到版本2停服更新前都沒有暴露日杈,然后版本2維護(hù)的時間比版本1要長一些,結(jié)果內(nèi)存增長到瓶頸就掛了酿炸,當(dāng)然這是比較特殊的情況填硕。更多的還是當(dāng)前版本更新的內(nèi)容引起的鹿鳖。

java服務(wù)器我們可以讓運維使用:jmap -histo:live pid命令,打印出異常進(jìn)程的對象數(shù)量信息姻檀,同時找一個線上正常的進(jìn)程的做對比涝滴,找出對象數(shù)量明顯異常的對象歼疮,jvm gc無法回收的最大可能性就是存在大量強引用的異常對象,并且這些對象持續(xù)增長缩麸,因為某些原因沒有被回收導(dǎo)致堆內(nèi)存一直增加直到達(dá)到設(shè)置參數(shù)的極限骤素。

如下圖所示:


image.png

終端分屏的上面為異常的對象數(shù)量济竹,下方為正常的霎槐,可以非常明顯的看出這個對象數(shù)量肯定是存在問題的,于是我們可以基本定位到這個類的代碼存在漏洞袭景。然后引用也有可能是聯(lián)動的,就是一個對象數(shù)量的增長會帶動另外一個對象數(shù)量同樣增長荒澡,因為對象1引用了對象2单山,對象1不釋放幅疼,那么對象2同樣也不會釋放,所以我們在找尋異常對象時同樣需要判斷該對象是不是源頭悴晰,是不是是被帶動增長的逐工。

這個需要怎么判斷呢泪喊?每個服務(wù)端肯定會有一個數(shù)據(jù)實體的,當(dāng)請求服務(wù)端時需要構(gòu)造這么一個對象饲帅,這里以游戲服務(wù)端為例瘤泪,在游戲服務(wù)端里面就是一個Player對象,玩家相關(guān)的模塊都會掛在這個對象上面赦邻,那么其實我們首先需要觀察的就是該對象數(shù)量是否異常实檀,如果該對象數(shù)量明顯不對膳犹,那么這個異常一般跟該對象的行為有關(guān),因為即使相關(guān)模塊出問題铐料,很難反過來影響該對象的增長,如果有那就更好找了柒凉,沒有則再繼續(xù)分析篓跛。

如我們上面的分析,可以發(fā)現(xiàn)ActivityService這個對象數(shù)量不對愧沟,而且這個也是跟Player對象有關(guān)系的央渣,那么我們就可以從這里入手。如果你在查閱ActivityService這個類的代碼已經(jīng)發(fā)現(xiàn)問題所在北启,那么當(dāng)然是皆大歡喜拔第,但是如果仍舊無法定位或者依舊存疑咕村,那么這個時候內(nèi)存應(yīng)該dump下來了,我們可以通過分析內(nèi)存進(jìn)一步確認(rèn)問題的原因蚊俺。

dump內(nèi)存可以使用指令:jmap -dump:live,format=b,file=heap.bin <pid>

分析內(nèi)存我們可以使用MAT(Memory Analysis Tools)工具懈涛,MAT工具的安裝和使用網(wǎng)上已經(jīng)有很多教程了,就不贅述了泳猬,該工具功能非常強大批钠,是分析Java堆內(nèi)存的利器。

我們先用MAT打開dump下來的二進(jìn)制文件得封,然后點擊 Histogram埋心,查看內(nèi)存中的對象數(shù)量:


image.png

我們先看我們首要懷疑的Player對象,可以看到目前有14437個對象忙上,這個對象是否正常我們對比正常服的情況,這里明顯是不對的疫粥,因此我們通過
MAT工具找到這些Player對象為什么不會被回收:

image.png

先分類一下該對象的引用茬斧,得出下圖結(jié)果:


image.png

可以發(fā)現(xiàn)只有2個軟引用的Player對象,其余的都是GC ROOT梗逮,如果存在GC ROOT项秉,對象就不會被回收。

然后我們繼續(xù)跟蹤這些對象是被什么強引用:

image.png

得到的結(jié)果是:


image.png

如圖可知库糠,有14425的定時器在引用著這些Player對象伙狐,因為這些future沒有在執(zhí)行完畢或者在玩家下線等條件去移除,導(dǎo)致這些定時器一直存在瞬欧,這個時候問題的根源就找到了贷屎,至于怎么去定位更細(xì)節(jié)的問題產(chǎn)生原因,這個就涉及具體的業(yè)務(wù)細(xì)節(jié)了艘虎。

當(dāng)然MAT的功能肯定不止這些唉侄,我們通過該工具查看到這些對象在內(nèi)存中具體的值,


image.png

如里面的每個task的內(nèi)容都可以查看到野建,同時還可以對比對象属划,這個工具非常好玩,有待繼續(xù)挖掘候生!

希望對你有所幫助同眯。

Regards,
codjust

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末唯鸭,一起剝皮案震驚了整個濱河市须蜗,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌目溉,老刑警劉巖明肮,帶你破解...
    沈念sama閱讀 206,602評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異缭付,居然都是意外死亡柿估,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評論 2 382
  • 文/潘曉璐 我一進(jìn)店門陷猫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來秫舌,“玉大人,你說我怎么就攤上這事绣檬【讼铮” “怎么了?”我有些...
    開封第一講書人閱讀 152,878評論 0 344
  • 文/不壞的土叔 我叫張陵河咽,是天一觀的道長钠右。 經(jīng)常有香客問我,道長忘蟹,這世上最難降的妖魔是什么飒房? 我笑而不...
    開封第一講書人閱讀 55,306評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮媚值,結(jié)果婚禮上狠毯,老公的妹妹穿的比我還像新娘。我一直安慰自己褥芒,他們只是感情好嚼松,可當(dāng)我...
    茶點故事閱讀 64,330評論 5 373
  • 文/花漫 我一把揭開白布嫡良。 她就那樣靜靜地躺著,像睡著了一般献酗。 火紅的嫁衣襯著肌膚如雪寝受。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,071評論 1 285
  • 那天罕偎,我揣著相機與錄音很澄,去河邊找鬼。 笑死颜及,一個胖子當(dāng)著我的面吹牛甩苛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播俏站,決...
    沈念sama閱讀 38,382評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼讯蒲,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了肄扎?” 一聲冷哼從身側(cè)響起爱葵,我...
    開封第一講書人閱讀 37,006評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎反浓,沒想到半個月后萌丈,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,512評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡雷则,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,965評論 2 325
  • 正文 我和宋清朗相戀三年辆雾,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片月劈。...
    茶點故事閱讀 38,094評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡度迂,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出猜揪,到底是詐尸還是另有隱情惭墓,我是刑警寧澤,帶...
    沈念sama閱讀 33,732評論 4 323
  • 正文 年R本政府宣布而姐,位于F島的核電站腊凶,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏拴念。R本人自食惡果不足惜钧萍,卻給世界環(huán)境...
    茶點故事閱讀 39,283評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望政鼠。 院中可真熱鬧风瘦,春花似錦、人聲如沸公般。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至瞬雹,卻和暖如春昧谊,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背挖炬。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評論 1 262
  • 我被黑心中介騙來泰國打工揽浙, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留状婶,地道東北人意敛。 一個月前我還...
    沈念sama閱讀 45,536評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像膛虫,于是被迫代替她去往敵國和親草姻。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,828評論 2 345

推薦閱讀更多精彩內(nèi)容