[GC調(diào)優(yōu)]一次內(nèi)存泄漏的經(jīng)歷分享

背景

運(yùn)維人員在生產(chǎn)服務(wù)器上用定時(shí)任務(wù)隔一段時(shí)間生成GC文件,今天在開發(fā)群里由報(bào)警機(jī)器人發(fā)送了一條消息"xxx應(yīng)用發(fā)現(xiàn)GC文件,下載地址:xxxx",然后總監(jiān)親自給我們展示了如何去分析GC文件來判斷是否有內(nèi)存泄漏。

dump二進(jìn)制文件-hprof

關(guān)于如何生成hprof文件,可以詳細(xì)查閱一下jmap指令.
我這里直接貼出JVM指令:

# 使用jps查看進(jìn)程號,也就是pid
$> jps
# 使用jmap導(dǎo)出dump文件  
$> jmap -dump:format=b,file=mydump.hprof pid  
dump

MemoryAnalyzer

使用大名鼎鼎的"MAT"(Memory Analyzer Tool)可以很好的分析dump文件.
下載地址: 官網(wǎng)

配置堆棧大小-MemoryAnalyzer.ini

-startup
plugins/org.eclipse.equinox.launcher_1.5.0.v20180512-1130.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.700.v20180518-1200
-vmargs
-Xmx4096m

打開dump文件-open file

  • 打開dump文件
open-dump

點(diǎn)擊finish即可

finish

擒賊先擒王-Leak Suspects

Leak Suspects

看到Leak Suspects一開始我還有點(diǎn)懵逼,為此我還專門去查了一下google.


leak suspects

ok,這里我們看到,MAT把泄漏嫌疑最大的幾個(gè)case展示出來了,那么我們可以從最大的嫌疑犯開始,直接看Problem Suspect 1.

1
  • 查看內(nèi)存分配樹、Thread Stack
button
  • 內(nèi)存分配樹
tree

這里說一下: 如果懷疑是SQL的問題,可以在堆棧中找找這個(gè)包所綁定的SQL:
org.apache.ibatis.mapping.BoundSql.

  • Thread OverView
details

這里提供一個(gè)快速查找的技巧,一般公司的項(xiàng)目,都會有特定的包路徑,直接ctrl+F查找相關(guān)關(guān)鍵字即可,比如百度的項(xiàng)目,直接搜索"baidu".

結(jié)果

最后,我們定位到了一個(gè)SQL未進(jìn)行分頁,造成了內(nèi)存泄漏。這里不對結(jié)果進(jìn)行展示了.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容