排查內(nèi)存泄漏你需要知道的套路

內(nèi)存泄漏是一個比較棘手的問題肪笋,大多數(shù)時候沒有明顯的報錯,這給問題排查帶來很大困難,好在前人已經(jīng)遇到很多類似問題藤乙,也留下了一些典型的排查套路猜揪,大部分時候只需要按圖索驥,一步步來即可坛梁。

套路之工具篇

  • ps或者jps
    ps:查找活躍的進(jìn)程
    典型用法:ps -ef|grep java
    jps:查找活躍的 java進(jìn)程*
    典型用法:jps -v
  • jmap
    jmap 可以將java內(nèi)存打印出來而姐,作為內(nèi)存分析工具(如MAT)的輸入
  • jinfo
    可以用來查看java進(jìn)程的啟動信息,可以看下內(nèi)存堆大小的設(shè)置
  • jstat
    可以用來打印JVM的運(yùn)行時GC統(tǒng)計信息, 典型用法如
    jstat -gcutil 21891 250 2
    表示鏈接到21891這個進(jìn)程划咐,每250ms用gcutil打印一次拴念,一共取2個實例,通常打印出來的效果是這樣的
$ jstat -gcutil 19677 1000 2
  S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT
 85.04   0.00  15.15   3.61  44.32      4    0.834     1    0.705    1.538
 85.04   0.00  15.15   3.61  44.32      4    0.834     1    0.705    1.538

PS:如果命令有任何不清楚政鼠,男人(man)是你的好朋友:)

套路之實戰(zhàn)篇

1. 獲取內(nèi)存dump

進(jìn)程還活著:

  • 使用ps查找java進(jìn)程ID
    ps -ef|grep java 或者 jps
  • jmap 將內(nèi)存dump到本地
    jmap -dump:live,format=b,file=dump.bin 19677
    會輸出dump.bin文件

已經(jīng)OOM掛了:

提前在java 運(yùn)行參數(shù)添加 -XX:+HeapDumpOnOutOfMemoryError 表示掛了需要dump當(dāng)時內(nèi)存,再添加 -XX:HeapDumpPath=/tmp表示dump內(nèi)存存放的位置, 這樣當(dāng)應(yīng)用down掉之后队魏,會輸出一個.hprof文件

2. 內(nèi)存分析

  • 使用MAT導(dǎo)入上一步生成的dump文件公般,分析之后你會看到類似這樣一張圖
1.png

從這里為入口,可以查看哪些對象占用內(nèi)存較大胡桨,內(nèi)存泄漏的可疑點在哪里官帘,比如這個case, 點到Leak Suspects這個鏈接可以看到

2.png

這是個比較直觀的問題,HashMapEntry對象占用了超過99%的內(nèi)存空間昧谊,可以直接看業(yè)務(wù)代碼哪里HashMap使用出了問題刽虹。
這是MAT比較簡單的應(yīng)用,其他高級用法可以看MAT官方文檔呢诬,或這篇文章 Java程序內(nèi)存分析:使用mat工具分析內(nèi)存占用 - 孤劍 - 博客園

結(jié)語

相信了解了這些工具與套路涌哲,下次遇到可疑內(nèi)存泄漏或者OOM這樣的嚴(yán)重問題,就不會茫然無措了馅巷。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末膛虫,一起剝皮案震驚了整個濱河市草姻,隨后出現(xiàn)的幾起案子钓猬,更是在濱河造成了極大的恐慌,老刑警劉巖撩独,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件敞曹,死亡現(xiàn)場離奇詭異,居然都是意外死亡综膀,警方通過查閱死者的電腦和手機(jī)澳迫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來剧劝,“玉大人橄登,你說我怎么就攤上這事。” “怎么了拢锹?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵谣妻,是天一觀的道長。 經(jīng)常有香客問我卒稳,道長蹋半,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任充坑,我火速辦了婚禮减江,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘捻爷。我一直安慰自己辈灼,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布也榄。 她就那樣靜靜地躺著茵休,像睡著了一般手蝎。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上棵介,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天,我揣著相機(jī)與錄音邮辽,去河邊找鬼唠雕。 笑死吨述,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的揣云。 我是一名探鬼主播捕儒,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼刘莹,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了焚刚?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤矿咕,失蹤者是張志新(化名)和其女友劉穎抢肛,沒想到半個月后狼钮,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡捡絮,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年燃领,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片锦援。...
    茶點故事閱讀 38,789評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡猛蔽,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出灵寺,到底是詐尸還是另有隱情曼库,我是刑警寧澤,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布略板,位于F島的核電站毁枯,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏叮称。R本人自食惡果不足惜种玛,卻給世界環(huán)境...
    茶點故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望瓤檐。 院中可真熱鬧赂韵,春花似錦、人聲如沸挠蛉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽谴古。三九已至质涛,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間掰担,已是汗流浹背汇陆。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留带饱,地道東北人毡代。 一個月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像纠炮,于是被迫代替她去往敵國和親月趟。 傳聞我的和親對象是個殘疾皇子灯蝴,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,697評論 2 351

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