CMS垃圾回收案例分享(JDK1.7) - 如何避免JVM內(nèi)存資源耗盡

案例描述

我們在做項(xiàng)目遷移后 (jdk1.6 ->1.7, 框架升級到spring,業(yè)務(wù)代碼不做修改)昌简,發(fā)現(xiàn)遷移后的一些instance的gcoverhead在某個特定的時間段(我們用「T」來表示)會突然飆高吟逝,最終出現(xiàn)了jvm heap memory被耗盡的情況案怯,導(dǎo)致應(yīng)用無法響應(yīng)。


image.png

案例分析

我們首先分析這類問題是什么原因造成的澎办。我們具體找了其中一臺機(jī)器查看metrics,發(fā)現(xiàn)jvm heap memory在「T」時間段驟降金砍,最終無法恢復(fù)局蚀。

image.png

我們查看了對應(yīng)時間段「T」的log,我們發(fā)現(xiàn)在這段期間有很多請求(我們用A代替)超時的異常恕稠,這類request會去一個service(我們用B代替)上拿資源琅绅。日志顯示「T」時間段A類請求的耗時特別長,50000ms的請求比比皆是鹅巍。我們開始以為A類請求是在請求大文件千扶,所以超時時間設(shè)置比較大,因?yàn)檫@個項(xiàng)目本身就是要進(jìn)行各類文件的操作骆捧。但從日志發(fā)現(xiàn)澎羞,這類文件也不過6M。這對于一個內(nèi)網(wǎng)之間的請求調(diào)用而言敛苇,不是什么壓力妆绞。所以我們猜測,是網(wǎng)絡(luò)波動或者B服務(wù)本身不穩(wěn)定導(dǎo)致的問題,。我們隨后查看了A請求超時時間設(shè)置括饶,為900000ms.

然后我們把目光轉(zhuǎn)移到了遷移前老的項(xiàng)目株茶,我們發(fā)現(xiàn)在該特定時段「T」也會出現(xiàn)請求超時這類錯誤,A請求的超時時間也為900000ms图焰。遷移前老的項(xiàng)目也會因?yàn)檫^高的gcoverhead導(dǎo)致個別instance內(nèi)存被耗盡启盛,但影響的范圍很小,對于個別instance出現(xiàn)異常技羔,dev/ops的job會負(fù)責(zé)重啟項(xiàng)目僵闯。而且老的項(xiàng)目對于這種超時異常導(dǎo)致的問題的承受能力是25k per hour,而遷移后的項(xiàng)目堕阔,僅僅是3.5k棍厂。

image.png

是什么差異導(dǎo)致這種不同的行為呢?我們先看一下遷移前后和遷移后的一些參數(shù)對比

image.png

參數(shù)的差異最終鎖定到y(tǒng)oung generation的占比超陆。我們拿到了項(xiàng)目的heap dump牺弹。對于ibm jdk1.6和open jdk1.7,兩者使用的都是分代垃圾回收器时呀,open jdk1.7里面就是我們熟悉的CMS张漂。我們通過圖片可以看出最后gcoverhead增高是由于old generation的頻繁full gc導(dǎo)致的。對于CMS垃圾回收器的原理谨娜,這里簡單描述一下航攒,一個實(shí)例一般最開始創(chuàng)建于young generation(默認(rèn)Survivor0 : Survivor1 : Eden = 1 : 1 : 8)的Eden區(qū),在這個區(qū)域會進(jìn)行young gc趴梢,觸發(fā)條件Eden區(qū)滿了漠畜。對象經(jīng)過若干次(java對象頭里面用4個bit來存儲gc標(biāo)記,最大次數(shù)是15坞靶,但針對CMS憔狞,默認(rèn)是4次。JVM 參數(shù)的設(shè)定為-XX:MaxTenuringThreshold 彰阴。這個參數(shù)和 -XX:TargetSurvivorRatio配合使用:期望s區(qū)存活大小的參數(shù)瘾敢。默認(rèn)值為50,即50%尿这。當(dāng)一個S區(qū)中所有的age對象的大小如果大于等于Desired survivor size簇抵,則重新計算threshold,以age和MaxTenuringThreshold兩者的最小值為準(zhǔn)射众。來決定是否要晉升到老年代young gc后如果還存活碟摆,會進(jìn)入老年代,當(dāng)老年代滿了叨橱,會觸發(fā)full gc抱既,full gc會STW,會消耗大量資源慕购。
所以看出舟舒,升級到老年代,不一定完全按照age ,如果object 增長過大, 甚至只經(jīng)過一次就直接進(jìn)入到老年代了。

image.png

從圖中我們可以看到Y(jié)oung generation中minior gc的頻率特別高厢洞,原因是我們遷移后的項(xiàng)目的young generation的占比過低(800m/6000m,一般推薦1:3)這樣就會導(dǎo)致一個問題典奉,對象過早晉升到年老代躺翻,從而觸發(fā)年老代頻繁的full gc。對應(yīng)到剛才的案例就是這些很占資源的長鏈接實(shí)例卫玖,經(jīng)過多次young gc一直沒有被回收 最終晉升到老年代 導(dǎo)致觸發(fā)頻繁的full gc 最終消耗盡jvm資源

image.png
image.png

解決辦法

在遷移后的項(xiàng)目里面公你,框架默認(rèn)young generation為800m,最終我們將遷移后的項(xiàng)目設(shè)定為2000m假瞬,當(dāng)出現(xiàn)這種大面積資源獲取緩慢時陕靠,項(xiàng)目不再出現(xiàn)抗不過的情況。至于為什么在timeout 900000ms這塊沒有進(jìn)行調(diào)優(yōu)脱茉,因?yàn)槟壳绊?xiàng)目是在遷移階段剪芥,我們是保持和老的項(xiàng)目相同的配置。而且問題我們有向用戶那邊反應(yīng)琴许,至于后續(xù)的更改税肪,由用戶來決定。

參考文檔
https://www.oracle.com/java/technologies/javase/vmoptions-jsp.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
禁止轉(zhuǎn)載榜田,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者益兄。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市箭券,隨后出現(xiàn)的幾起案子偏塞,更是在濱河造成了極大的恐慌,老刑警劉巖邦鲫,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異神汹,居然都是意外死亡庆捺,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進(jìn)店門屁魏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來滔以,“玉大人,你說我怎么就攤上這事氓拼∧慊” “怎么了抵碟?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長坏匪。 經(jīng)常有香客問我拟逮,道長,這世上最難降的妖魔是什么适滓? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任敦迄,我火速辦了婚禮,結(jié)果婚禮上凭迹,老公的妹妹穿的比我還像新娘罚屋。我一直安慰自己,他們只是感情好嗅绸,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布脾猛。 她就那樣靜靜地躺著,像睡著了一般鱼鸠。 火紅的嫁衣襯著肌膚如雪猛拴。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天瞧柔,我揣著相機(jī)與錄音漆弄,去河邊找鬼。 笑死造锅,一個胖子當(dāng)著我的面吹牛撼唾,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播哥蔚,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼倒谷,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了糙箍?” 一聲冷哼從身側(cè)響起渤愁,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎深夯,沒想到半個月后抖格,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡咕晋,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年雹拄,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片掌呜。...
    茶點(diǎn)故事閱讀 39,981評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡滓玖,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出质蕉,到底是詐尸還是另有隱情势篡,我是刑警寧澤翩肌,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站禁悠,受9級特大地震影響念祭,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜绷蹲,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一棒卷、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧祝钢,春花似錦比规、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至疤估,卻和暖如春灾常,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背铃拇。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工钞瀑, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人慷荔。 一個月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓雕什,卻偏偏與公主長得像,于是被迫代替她去往敵國和親显晶。 傳聞我的和親對象是個殘疾皇子贷岸,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評論 2 355

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