基于Java內(nèi)存dump文件分析解決內(nèi)存泄漏問題

概述

  本文介紹一次解決現(xiàn)場java內(nèi)存泄漏問題的經(jīng)過领迈,希望能提供后續(xù)遇到類似情況的讀者一點(diǎn)思路波材。

生產(chǎn)環(huán)境發(fā)現(xiàn)的問題問題

  生產(chǎn)環(huán)境運(yùn)維人員反饋拆魏,服務(wù)器(windows系統(tǒng))卡死搓谆,相關(guān)的服務(wù)都運(yùn)行異常薯嗤,重啟之后也沒作用嘹害。通過運(yùn)行管理器看到j(luò)ava進(jìn)程內(nèi)存占用5G撮竿,初步判斷是程序內(nèi)存泄漏。

基本解決方案

  基本解決方案是先收集生產(chǎn)環(huán)境的jvm內(nèi)存使用信息吼拥,線程信息倚聚,再利用工具進(jìn)行進(jìn)一步分析。

解決過程

1凿可、收集jvm內(nèi)存信息惑折,線程信息

生產(chǎn)環(huán)境的操作系統(tǒng)是windows,機(jī)器需要先設(shè)置好JAVA_HOME環(huán)境變量枯跑。下面以java進(jìn)程PID為12140惨驶,輸出文件路徑保存在C:\jvmtest 文件夾中為例。

1.1敛助、收集內(nèi)存使用基本情況統(tǒng)計(jì)

使用命令行命令:jmap -heap 12140 > C:\jvmtest\jmapheap
直接打開查看C:\jvmtest文件夾下面的jampheap文件粗卜,里面包含內(nèi)存使用情況基本統(tǒng)計(jì),可以確認(rèn)問題原因不是jvm參數(shù)內(nèi)存分配過小纳击。
可以看到j(luò)ava堆內(nèi)存基本已經(jīng)用完续扔。

內(nèi)存使用情況基本統(tǒng)計(jì).png

1.2、收集所有java線程運(yùn)行信息

使用命令行命令:jstack 12140 > C:\jvmtest\jstack

直接打開查看C:\jvmtest文件夾下面的jstack文件焕数,里面包含所有java線程運(yùn)行信息:


所有java線程運(yùn)行信息
1.3纱昧、收集java內(nèi)存詳細(xì)使用信息

使用命令行命令:jmap -dump:format=b,file=C:\jvmtest\jmap_dump_all 12140
得到C:\jvmtest文件夾下面的jmap_dump_all文件,該內(nèi)存dump文件有5G大小堡赔,二進(jìn)制文件识脆,不可直接查看,需要用工具查看。

2灼捂、基于工具分析

2.1离例、工具選擇

如果dump文件比較小,推薦直接使用jdk自帶的jvisiualvm工具進(jìn)行打開悉稠,但是如果dump文件比較大宫蛆,親測jvisiualvm打開失敗,這時推薦選擇eclipse的內(nèi)存分析工具:eclipse memory analyer(mat)

2.2的猛、eclipse memory analye軟件配置

這里選擇從eclipse官網(wǎng)下載MemoryAnalyzer-1.7.0.20170613-win32.win32.x86_64.zip文件(也可以下載eclipse插件)洒扎,由于dump文件比較大拱燃,打開分析工具前需要修改eclipse memory analyer的內(nèi)存配置:

配置.png
配置.png

最后一行修改為需要的內(nèi)存大小

如果dump文件比較大的情況下膜宋,如果分析工具運(yùn)行的環(huán)境機(jī)器內(nèi)存太小是打不開的沸久,機(jī)器可用內(nèi)存至少要比dump文件大。

2.2猫牡、查看分析情況

打開eclipse memory analye軟件,載入dump文件邓线,看到以下信息:

overlook.png
線程內(nèi)存使用情況.png
2.3淌友、問題定位

基于eclipse memory analye軟件,可用定位到有1條線程名為pool-4-thread-1的線程骇陈,里面有一個ArrayList的對象震庭,這個list對象保存了一系列的HashMap對象,總共有4G你雌。

搜索 1.2步驟介紹的所有java線程信息的文件器联,可以得到pool-4-thread-1線程運(yùn)行狀態(tài)如下:基于此可以定位到有問題的代碼。

image.png
2.4婿崭、問題原因定位

檢查代碼的時候發(fā)現(xiàn)拨拓,程序有一個模塊,功能是從數(shù)據(jù)庫定時查詢數(shù)據(jù)然后數(shù)據(jù)做處理氓栈,模塊中把查出來的數(shù)據(jù)基于log4j寫到日志中渣磷,實(shí)際現(xiàn)場環(huán)境有時候定時查詢得到的數(shù)據(jù)有幾百兆,打印到日志文件中打印不過來授瘦。導(dǎo)致數(shù)據(jù)在內(nèi)存中不斷積壓等待被打印醋界,內(nèi)存得不到釋放。

總結(jié)

本次使用了JVM性能調(diào)優(yōu)監(jiān)控工具jstack提完、jamp形纺,相關(guān)工具還有jstack、jmap氯葬、jhat挡篓、jstat,這些工具對于內(nèi)存溢出,CPU飆升官研,線程死鎖秽澳、等問題解決非常有幫助。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末戏羽,一起剝皮案震驚了整個濱河市担神,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌始花,老刑警劉巖妄讯,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異酷宵,居然都是意外死亡亥贸,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進(jìn)店門浇垦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來炕置,“玉大人,你說我怎么就攤上這事男韧∑犹” “怎么了?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵此虑,是天一觀的道長甚纲。 經(jīng)常有香客問我,道長朦前,這世上最難降的妖魔是什么介杆? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮韭寸,結(jié)果婚禮上这溅,老公的妹妹穿的比我還像新娘。我一直安慰自己棒仍,他們只是感情好悲靴,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著莫其,像睡著了一般癞尚。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上乱陡,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天浇揩,我揣著相機(jī)與錄音,去河邊找鬼憨颠。 笑死胳徽,一個胖子當(dāng)著我的面吹牛积锅,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播养盗,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼缚陷,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了往核?” 一聲冷哼從身側(cè)響起箫爷,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎聂儒,沒想到半個月后虎锚,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡衩婚,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年窜护,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片非春。...
    茶點(diǎn)故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡柄慰,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出税娜,到底是詐尸還是另有隱情,我是刑警寧澤藏研,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布敬矩,位于F島的核電站,受9級特大地震影響蠢挡,放射性物質(zhì)發(fā)生泄漏弧岳。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一业踏、第九天 我趴在偏房一處隱蔽的房頂上張望禽炬。 院中可真熱鬧,春花似錦勤家、人聲如沸腹尖。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽热幔。三九已至,卻和暖如春讼庇,著一層夾襖步出監(jiān)牢的瞬間绎巨,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工蠕啄, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留场勤,地道東北人戈锻。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像和媳,于是被迫代替她去往敵國和親格遭。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評論 2 353

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

  • 參考自 http://techblog.youdao.com/?p=961 在分析具體故障窗价,先介紹一下幾種常用的工...
    抓兔子的貓閱讀 5,953評論 1 27
  • jmap -heap 1234 查看進(jìn)程號為1234的Java程序的整個jvm內(nèi)存狀態(tài) jmap -histo 1...
    daocers閱讀 54,434評論 0 5
  • 今天抑郁越來越嚴(yán)重 群里小伙伴聊得很多撼港。想著以后不知能不能好了坪它,不能好的話,我就躲起來帝牡,不要面對這個社會了 失戀失...
    小徑時光閱讀 212評論 0 0
  • 很多人遇到愛人的時候往毡。 會對她或他說, 早點(diǎn)遇到你就好了靶溜。 其實(shí)开瞭, 現(xiàn)在遇到, 剛剛好罩息, 不早不晚嗤详。 每一個時空的...
    358741519617閱讀 445評論 0 0
  • 河南話的說法葱色,大多字的發(fā)音跟普通話都一樣,只是聲調(diào)的不同娘香。 四個聲調(diào)ā á ǎ à苍狰,第一個聲調(diào)ā,往往發(fā)第二個聲調(diào)...
    羅掌柜real閱讀 4,053評論 0 0