31-公司級別的JVM參數(shù)模板然眼,拿走不送

歡迎關(guān)注公眾號OpenCoder甘邀,來和我做朋友吧~??????
就目前大部分互聯(lián)網(wǎng)創(chuàng)業(yè)型公司,其開發(fā)的系統(tǒng)幾乎都不會考慮JVM性能優(yōu)化這一塊昔字,哪怕一個團隊中有1個技術(shù)Leader或架構(gòu)師爆袍,往往都沒有太多精力去把控到特別細節(jié)的地方上,以及對JVM也沒有那么的精通與熟悉,這也導(dǎo)致一個很大的問題螃宙,大部分工程師開發(fā)完一個系統(tǒng)后蛮瞄,部署生產(chǎn)環(huán)境的時候根本對JVM參數(shù)什么的設(shè)置一竅不通,也就是默認的JVM參數(shù)進行系統(tǒng)的運行谆扎,等系統(tǒng)在某個時段出現(xiàn)問題后挂捅,開始大量分析找bug,很久也未能找出什么原因堂湖。

默認的JVM參數(shù)絕對是系統(tǒng)負載逐漸增高的時候一個最大的問題

如果你不設(shè)置-Xmx闲先、-Xms之類的堆內(nèi)存大小的話,你啟動一個系統(tǒng)无蜂,可能默認就給你幾百MB的堆內(nèi)存大小伺糠,新生代和老年代可能都是幾百MB的樣子。新生代內(nèi)存過小斥季,會導(dǎo)致Survivor區(qū)域內(nèi)存過小训桶,同時Eden區(qū)域也很小。Eden區(qū)域過小酣倾,自然會導(dǎo)致頻繁的觸發(fā)Young GC舵揭,Survivor區(qū)域過小,自然會導(dǎo)致經(jīng)常在Young GC之后存活對象其實也沒多少躁锡,但就是Survivor區(qū)域放不下午绳。此時必然會導(dǎo)致對象經(jīng)常進入老年代中,因此也必然會導(dǎo)致老年代過一段時間就放滿了映之,然后就會觸發(fā)Full GC拦焚。

因此在大部分工程師都對JVM優(yōu)化不是很精通的情況下,而你作為技術(shù)Leader或架構(gòu)師杠输,通過推行一個JVM參數(shù)模板赎败,可以讓各個系統(tǒng)短時間內(nèi)迅速優(yōu)化JVM的性能。

這里強調(diào)一點:沒有絕對的模板蠢甲,任何系統(tǒng)的實際運行情況以及生產(chǎn)環(huán)境都不一樣螟够,因此不能直接想著萬能模板解決,而是真正自己通過分析JVM的運行情況峡钓,內(nèi)存占比妓笙,GC頻率去準(zhǔn)確的進行優(yōu)化!

這里我們僅僅是針對中小型公司能岩,一些完全不懂JVM參數(shù)優(yōu)化的團隊寞宫,給出一個標(biāo)準(zhǔn)的模板進行優(yōu)化,總比直接使用默認JVM參數(shù)要好很多拉鹃!然后盡量讓大部分系統(tǒng)套用這個模板辈赋,基本保證JVM性能別太差鲫忍,避免很多初中級工程師直接使用默認的JVM參數(shù),可能一臺8G內(nèi)存的機器上钥屈,JVM堆內(nèi)存就分配了幾百MB悟民。

模板參數(shù):

-Xms4096M 
-Xmx4096M 
-Xmn3072M 
-Xss1M  
-XX:PermSize=256M 
-XX:MaxPermSize=256M 
-XX:+UseParNewGC -XX:+UseConcMarkSweepGC 
-XX:CMSInitiatingOccupancyFraction=92 
-XX:+UseCMSCompactAtFullCollection 
-XX:CMSFullGCsBeforeCompaction=0

參數(shù)設(shè)置解釋:

一般來講線上部署的機器都差不多是8G4核,那么分配4G給JVM內(nèi)存也就足夠了篷就,畢竟還有其他一些進程需要使用到內(nèi)存射亏,然后新生代分配了3G,盡量讓新生代大一些竭业!進而對應(yīng)的Survivor區(qū)域能分配到300MB智润。

不同的系統(tǒng)運行的狀況不同,基本上每次minor gc 過后存活幾十MB對象是常態(tài)未辆,因此幾十MB對象進入Survivor區(qū)還是很輕松的窟绷,也不會輕易觸發(fā) 動態(tài)年齡判定規(guī)則,讓部分對象直接進老年代咐柜。

只要內(nèi)存分配合理兼蜈,那么進入老年代的對象就很少或極慢,該參數(shù)模板在多個系統(tǒng)的測試下拙友,通過jstat觀察饭尝,基本上各個系統(tǒng)的Full GC都在幾天發(fā)生一次。

-XX:CMSFullGCsBeforeCompaction=0該參數(shù)的設(shè)置也是非常重要献宫,保證了我們每次Full GC之后都會執(zhí)行一次內(nèi)存整理,解決內(nèi)存碎片的問題实撒。

進一步性能優(yōu)化:

這里我們再介紹兩個參數(shù)姊途,可以幫助優(yōu)化Full GC的性能,把每次Full GC的時間進一步降低一些知态。

第一個參數(shù):-XX:+CMSParallelInitialMarkEnabled捷兰,這個參數(shù)會在CMS垃圾回收器的“初始標(biāo)記”階段開啟多線程并發(fā)執(zhí)行。

因為初始標(biāo)記階段负敏,我們之前說過是會進入STW的贡茅,導(dǎo)致系統(tǒng)停頓,所以這個階段如果能多線程并發(fā)執(zhí)行其做,可以有效提升標(biāo)記的效率顶考,減少STW的時間。

第二個參數(shù):-XX:+CMSScavengeBeforeRemark妖泄,這個參數(shù)會在CMS的重新標(biāo)記階段之前驹沿,先盡量執(zhí)行一次Young GC。

CMS的重新標(biāo)記階段也是會進入STW的蹈胡,所以如果在重新標(biāo)記之前渊季,先執(zhí)行一次Young GC朋蔫,就會回收掉一些年輕代里沒有人引用的對象。所以如果先提前回收掉一些對象却汉,那么在CMS的重新標(biāo)記階段就可以少掃描一些對象驯妄,此時就可以提升CMS的重新標(biāo)記階段的性能,減少他的耗時合砂。

加入兩個參數(shù)后的整體JVM參數(shù)模板:

-Xms4096M 
-Xmx4096M 
-Xmn3072M 
-Xss1M  
-XX:PermSize=256M 
-XX:MaxPermSize=256M 
-XX:+UseParNewGC -XX:+UseConcMarkSweepGC 
-XX:CMSInitiatingOccupancyFraction=92 
-XX:+UseCMSCompactAtFullCollection 
-XX:CMSFullGCsBeforeCompaction=0
-XX:+CMSParallelInitialMarkEnabled
-XX:+CMSScavengeBeforeRemark    

ok青扔,那么以上JVM參數(shù)模板就給到大家了,后續(xù)開發(fā)中可以直接進行使用既穆。哪怕是不太懂JVM優(yōu)化的普通工程師只要套用這個模板赎懦,對一些普通的業(yè)務(wù)系統(tǒng),都能保證其JVM性能不會出現(xiàn)大的問題幻工,比如頻繁的Young GC和Full GC導(dǎo)致的系統(tǒng)頻繁卡頓励两。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市囊颅,隨后出現(xiàn)的幾起案子当悔,更是在濱河造成了極大的恐慌,老刑警劉巖踢代,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件盲憎,死亡現(xiàn)場離奇詭異,居然都是意外死亡胳挎,警方通過查閱死者的電腦和手機饼疙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來慕爬,“玉大人窑眯,你說我怎么就攤上這事∫搅” “怎么了磅甩?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長姥卢。 經(jīng)常有香客問我卷要,道長,這世上最難降的妖魔是什么独榴? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任僧叉,我火速辦了婚禮,結(jié)果婚禮上棺榔,老公的妹妹穿的比我還像新娘彪标。我一直安慰自己,他們只是感情好掷豺,可當(dāng)我...
    茶點故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布捞烟。 她就那樣靜靜地躺著薄声,像睡著了一般。 火紅的嫁衣襯著肌膚如雪题画。 梳的紋絲不亂的頭發(fā)上默辨,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天,我揣著相機與錄音苍息,去河邊找鬼缩幸。 笑死,一個胖子當(dāng)著我的面吹牛竞思,可吹牛的內(nèi)容都是我干的表谊。 我是一名探鬼主播,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼盖喷,長吁一口氣:“原來是場噩夢啊……” “哼爆办!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起课梳,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤距辆,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后暮刃,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體跨算,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年椭懊,在試婚紗的時候發(fā)現(xiàn)自己被綠了诸蚕。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,424評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡氧猬,死狀恐怖背犯,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情狂窑,我是刑警寧澤,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布桑腮,位于F島的核電站泉哈,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏破讨。R本人自食惡果不足惜丛晦,卻給世界環(huán)境...
    茶點故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望提陶。 院中可真熱鬧烫沙,春花似錦、人聲如沸隙笆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至瘸爽,卻和暖如春您访,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背剪决。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工灵汪, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人柑潦。 一個月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓享言,卻偏偏與公主長得像,于是被迫代替她去往敵國和親渗鬼。 傳聞我的和親對象是個殘疾皇子览露,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,435評論 2 359

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