排查java應(yīng)用linux環(huán)境內(nèi)存占用過高的問題

一要拂、問題場景

在一個(gè)短信平臺的項(xiàng)目中巴比,設(shè)置了一個(gè)下發(fā)節(jié)點(diǎn)的Xmx為16G术奖,但是出現(xiàn)了內(nèi)存撐滿礁遵,導(dǎo)致CPU過高的情況。當(dāng)時(shí)的具體情況是采记,該應(yīng)用內(nèi)存占用16G佣耐,該應(yīng)用CPU占用1400%(16核),服務(wù)器負(fù)載15左右唧龄。進(jìn)入應(yīng)用的實(shí)時(shí)日志兼砖,發(fā)現(xiàn)日志每打印四五秒后,會(huì)暫停一分多鐘既棺。這代表著由于內(nèi)存耗盡讽挟,導(dǎo)致cpu高負(fù)載,最終導(dǎo)致應(yīng)用程序不能正常運(yùn)行丸冕,斷斷續(xù)續(xù)耽梅。嚴(yán)重影響生產(chǎn)環(huán)境的運(yùn)行速率。

二胖烛、解決方案

1眼姐、線上救急的臨時(shí)方案:

(1)讓運(yùn)營停止審核,即停止繼續(xù)往堵塞應(yīng)用中送數(shù)據(jù)佩番。

內(nèi)存隊(duì)列中的數(shù)據(jù)讓它慢慢下放众旗,經(jīng)過幾個(gè)小時(shí)的下放后,斷斷續(xù)續(xù)由每次四五秒到十幾秒最終到幾十秒答捕,當(dāng)內(nèi)存隊(duì)列中的數(shù)據(jù)全部清空后,斷斷續(xù)續(xù)仍然存在屑那,但是要好了很多拱镐,基本是正常半分鐘,暫停半分鐘持际。這時(shí)候內(nèi)存占用仍然沒有明顯的下降沃琅。

(2)重啟服務(wù),內(nèi)存當(dāng)即釋放掉蜘欲,所有問題得到了臨時(shí)解決益眉。
(3)將應(yīng)用的Xmx由16G調(diào)高到52G,服務(wù)器是64G內(nèi)存的姥份。
(4)時(shí)刻關(guān)注這臺服務(wù)器的內(nèi)存cpu占用郭脂,每晚凌晨重啟。

2澈歉、解決根本問題展鸡,有參考 https://www.javazhiyin.com/34154.html

(1)輸入命令:top -c,查看占用內(nèi)存過高的進(jìn)程信息
(2)輸入命令:jmap -histo:live PID > xxx.log埃难,vim查看內(nèi)存中的存活對象統(tǒng)計(jì)莹弊,找出業(yè)務(wù)相關(guān)的類名
(3)如果第(2)步仍然不能定位到代碼中的具體對象涤久,輸入命令:jmap -dump:live,format=b,file=xxx.hprof PID

這個(gè)命令會(huì)將內(nèi)存里的所有信息都輸出,生成hprof文件忍弛。我16G的內(nèi)存占用响迂,輸出的文件大小為1.6G。注意:這個(gè)命令會(huì)導(dǎo)致應(yīng)用暫時(shí)掛起细疚,所以謹(jǐn)慎使用蔗彤。我的應(yīng)用當(dāng)時(shí)掛起了約10s。

(4)文件大小不是很大的話惠昔,使用jdk自帶的jhat命令即可幕与,輸入命令:jhat -J-mx2G -port 7170,該命令可以查看內(nèi)存占用的對象
(5)如果文件太大镇防,可以下載到本地使用jdk自帶的 jvisualvm 工具進(jìn)行分析啦鸣。下面詳細(xì)講怎么使用jvisualvm定位內(nèi)存占用問題。

二来氧、使用jvisualvm定位內(nèi)存占用問題

1诫给、jvisualvm.exe的文件路徑在java安裝路徑的bin目錄下

我的是 C:\Program Files\Java\jdk1.8.0_60\bin

2、打開儲存堆信息的 hprof 文件

(1)注意圖中 文件類型 選擇【堆 Dump(啦扬。hprof中狂,.*)】,否則hprof文件不會(huì)顯示

image.png

(2)設(shè)置jvisualVM的啟動(dòng)堆內(nèi)存

在使用 jvisualVM 的時(shí)候,加載1.6G的 hprof 文件扑毡,提示內(nèi)存不足胃榕,然后中斷。原來 jvisualVM 也需要設(shè)置java堆內(nèi)存瞄摊,于是修改Java_home/lib/visualvm/etc/visualvm.conf 文件中 visualvm_default_options="-J-client -J-Xms24 -J-Xmx256m",把256調(diào)大勋又,本案例中設(shè)置成了1024m,然后重啟jvisualVM即可


image.png

3、如果有內(nèi)存泄漏换帜,概要界面會(huì)顯示它的線程楔壤,

本案例中不存在內(nèi)存泄漏問題


image.png

4、進(jìn)入界面具體分析

(1)如圖惯驼,點(diǎn)擊【類】蹲嚣,可以看到占用 內(nèi)存較多的對象。

如果有應(yīng)用代碼中的對象祟牲,那么就破案了隙畜。此案例中 TbKeywordBan占用較高,但是應(yīng)該不是主因说贝。


image.png
(2)我們分別雙擊點(diǎn)開占用內(nèi)存很多的 HashMap$Node禾蚕、AtomicInteger、Long狂丝。觀察引用他們的父級對象换淆。

多點(diǎn)開幾個(gè)進(jìn)行觀察哗总,都發(fā)現(xiàn)了 ExpiryMap 這個(gè)類,到此處倍试,就已經(jīng)破案了讯屈。


image.png

5、找到業(yè)務(wù)代碼中的 ExpiryMap.java县习,分析它的內(nèi)存占用情況涮母,進(jìn)行java代碼層面的調(diào)優(yōu)工作。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末躁愿,一起剝皮案震驚了整個(gè)濱河市叛本,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌彤钟,老刑警劉巖来候,帶你破解...
    沈念sama閱讀 222,378評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異逸雹,居然都是意外死亡营搅,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,970評論 3 399
  • 文/潘曉璐 我一進(jìn)店門梆砸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來转质,“玉大人,你說我怎么就攤上這事帖世⌒菪罚” “怎么了?”我有些...
    開封第一講書人閱讀 168,983評論 0 362
  • 文/不壞的土叔 我叫張陵日矫,是天一觀的道長赂弓。 經(jīng)常有香客問我,道長搬男,這世上最難降的妖魔是什么拣展? 我笑而不...
    開封第一講書人閱讀 59,938評論 1 299
  • 正文 為了忘掉前任彭沼,我火速辦了婚禮缔逛,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘姓惑。我一直安慰自己褐奴,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,955評論 6 398
  • 文/花漫 我一把揭開白布于毙。 她就那樣靜靜地躺著敦冬,像睡著了一般。 火紅的嫁衣襯著肌膚如雪唯沮。 梳的紋絲不亂的頭發(fā)上脖旱,一...
    開封第一講書人閱讀 52,549評論 1 312
  • 那天堪遂,我揣著相機(jī)與錄音,去河邊找鬼萌庆。 笑死溶褪,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的践险。 我是一名探鬼主播猿妈,決...
    沈念sama閱讀 41,063評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼巍虫!你這毒婦竟也來了彭则?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,991評論 0 277
  • 序言:老撾萬榮一對情侶失蹤占遥,失蹤者是張志新(化名)和其女友劉穎俯抖,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體筷频,經(jīng)...
    沈念sama閱讀 46,522評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蚌成,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,604評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了凛捏。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片担忧。...
    茶點(diǎn)故事閱讀 40,742評論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖坯癣,靈堂內(nèi)的尸體忽然破棺而出瓶盛,到底是詐尸還是另有隱情,我是刑警寧澤示罗,帶...
    沈念sama閱讀 36,413評論 5 351
  • 正文 年R本政府宣布惩猫,位于F島的核電站,受9級特大地震影響蚜点,放射性物質(zhì)發(fā)生泄漏轧房。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,094評論 3 335
  • 文/蒙蒙 一绍绘、第九天 我趴在偏房一處隱蔽的房頂上張望奶镶。 院中可真熱鬧,春花似錦陪拘、人聲如沸厂镇。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,572評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽捺信。三九已至,卻和暖如春欠痴,著一層夾襖步出監(jiān)牢的瞬間迄靠,已是汗流浹背秒咨。 一陣腳步聲響...
    開封第一講書人閱讀 33,671評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留掌挚,地道東北人拭荤。 一個(gè)月前我還...
    沈念sama閱讀 49,159評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像疫诽,于是被迫代替她去往敵國和親舅世。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,747評論 2 361