JVM系列篇:JVM性能調(diào)優(yōu)的6大步驟石洗,及關(guān)鍵調(diào)優(yōu)參數(shù)詳解

本系列會(huì)持續(xù)更新幢泼。

一、JVM內(nèi)存調(diào)優(yōu)


對(duì)JVM內(nèi)存的系統(tǒng)級(jí)的調(diào)優(yōu)主要的目的是減少GC的頻率和Full GC的次數(shù)讲衫。

1.Full GC

會(huì)對(duì)整個(gè)堆進(jìn)行整理缕棵,包括Young、Tenured和Perm涉兽。Full GC因?yàn)樾枰獙?duì)整個(gè)堆進(jìn)行回收招驴,所以比較慢,因此應(yīng)該盡可能減少Full GC的次數(shù)花椭。

2.導(dǎo)致Full GC的原因

1)年老代(Tenured)被寫滿

調(diào)優(yōu)時(shí)盡量讓對(duì)象在新生代GC時(shí)被回收忽匈、讓對(duì)象在新生代多存活一段時(shí)間和不要?jiǎng)?chuàng)建過大的對(duì)象及數(shù)組避免直接在舊生代創(chuàng)建對(duì)象 。

2)持久代Pemanet Generation空間不足

增大Perm Gen空間矿辽,避免太多靜態(tài)對(duì)象 丹允, 控制好新生代和舊生代的比例

3)System.gc()被顯示調(diào)用

垃圾回收不要手動(dòng)觸發(fā),盡量依靠JVM自身的機(jī)制

在對(duì)JVM調(diào)優(yōu)的過程中袋倔,很大一部分工作就是對(duì)于FullGC的調(diào)節(jié)雕蔽,下面詳細(xì)介紹對(duì)應(yīng)JVM調(diào)優(yōu)的方法和步驟。

二宾娜、JVM性能調(diào)優(yōu)方法和步驟


1.監(jiān)控GC的狀態(tài)

使用各種JVM工具批狐,查看當(dāng)前日志,分析當(dāng)前JVM參數(shù)設(shè)置前塔,并且分析當(dāng)前堆內(nèi)存快照和gc日志嚣艇,根據(jù)實(shí)際的各區(qū)域內(nèi)存劃分和GC執(zhí)行時(shí)間,覺得是否進(jìn)行優(yōu)化华弓。

舉一個(gè)例子: 系統(tǒng)崩潰前的一些現(xiàn)象:

每次垃圾回收的時(shí)間越來越長食零,由之前的10ms延長到50ms左右,F(xiàn)ullGC的時(shí)間也有之前的0.5s延長到4寂屏、5s

FullGC的次數(shù)越來越多贰谣,最頻繁時(shí)隔不到1分鐘就進(jìn)行一次FullGC

年老代的內(nèi)存越來越大并且每次FullGC后年老代沒有內(nèi)存被釋放

之后系統(tǒng)會(huì)無法響應(yīng)新的請(qǐng)求娜搂,逐漸到達(dá)OutOfMemoryError的臨界值,這個(gè)時(shí)候就需要分析JVM內(nèi)存快照dump吱抚。

2.生成堆的dump文件

通過JMX的MBean生成當(dāng)前的Heap信息百宇,大小為一個(gè)3G(整個(gè)堆的大小)的hprof文件秘豹,如果沒有啟動(dòng)JMX可以通過Java的jmap命令來生成該文件携御。

3.分析dump文件

打開這個(gè)3G的堆信息文件,顯然一般的Window系統(tǒng)沒有這么大的內(nèi)存憋肖,必須借助高配置的Linux因痛,幾種工具打開該文件:

Visual VM

IBM HeapAnalyzer

JDK 自帶的Hprof工具

Mat(Eclipse專門的靜態(tài)內(nèi)存分析工具)推薦使用

備注:文件太大,建議使用Eclipse專門的靜態(tài)內(nèi)存分析工具M(jìn)at打開分析岸更。

4.分析結(jié)果鸵膏,判斷是否需要優(yōu)化

如果各項(xiàng)參數(shù)設(shè)置合理,系統(tǒng)沒有超時(shí)日志出現(xiàn)怎炊,GC頻率不高谭企,GC耗時(shí)不高,那么沒有必要進(jìn)行GC優(yōu)化评肆,如果GC時(shí)間超過1-3秒债查,或者頻繁GC,則必須優(yōu)化瓜挽。

注:如果滿足下面的指標(biāo)盹廷,則一般不需要進(jìn)行GC:

Minor GC執(zhí)行時(shí)間不到50ms;

Minor GC執(zhí)行不頻繁久橙,約10秒一次俄占;

Full GC執(zhí)行時(shí)間不到1s;

Full GC執(zhí)行頻率不算頻繁淆衷,不低于10分鐘1次缸榄;

5.調(diào)整GC類型和內(nèi)存分配

如果內(nèi)存分配過大或過小,或者采用的GC收集器比較慢祝拯,則應(yīng)該優(yōu)先調(diào)整這些參數(shù)甚带,并且先找1臺(tái)或幾臺(tái)機(jī)器進(jìn)行beta,然后比較優(yōu)化過的機(jī)器和沒有優(yōu)化的機(jī)器的性能對(duì)比佳头,并有針對(duì)性的做出最后選擇鹰贵。

6.不斷的分析和調(diào)整

通過不斷的試驗(yàn)和試錯(cuò),分析并找到最合適的參數(shù)康嘉,如果找到了最合適的參數(shù)砾莱,則將這些參數(shù)應(yīng)用到所有服務(wù)器。

cms參數(shù)優(yōu)化步流程

下面我再繼續(xù)介紹下JVM的關(guān)鍵參數(shù)配置(僅用于參考)凄鼻。

JVM調(diào)優(yōu)參數(shù)參考

1.針對(duì)JVM堆的設(shè)置腊瑟,一般可以通過-Xms -Xmx限定其最小、最大值块蚌,為了防止垃圾收集器在最小闰非、最大之間收縮堆而產(chǎn)生額外的時(shí)間,通常把最大峭范、最小設(shè)置為相同的值;

2.年輕代和年老代將根據(jù)默認(rèn)的比例(1:2)分配堆內(nèi)存财松, 可以通過調(diào)整二者之間的比率NewRadio來調(diào)整二者之間的大小,也可以針對(duì)回收代纱控。

比如年輕代辆毡,通過 -XX:newSize -XX:MaxNewSize來設(shè)置其絕對(duì)大小。同樣甜害,為了防止年輕代的堆收縮舶掖,我們通常會(huì)把-XX:newSize -XX:MaxNewSize設(shè)置為同樣大小。

3.年輕代和年老代設(shè)置多大才算合理

1)更大的年輕代必然導(dǎo)致更小的年老代尔店,大的年輕代會(huì)延長普通GC的周期眨攘,但會(huì)增加每次GC的時(shí)間;小的年老代會(huì)導(dǎo)致更頻繁的Full GC

2)更小的年輕代必然導(dǎo)致更大年老代嚣州,小的年輕代會(huì)導(dǎo)致普通GC很頻繁鲫售,但每次的GC時(shí)間會(huì)更短;大的年老代會(huì)減少Full GC的頻率

如何選擇應(yīng)該依賴應(yīng)用程序對(duì)象生命周期的分布情況: 如果應(yīng)用存在大量的臨時(shí)對(duì)象该肴,應(yīng)該選擇更大的年輕代情竹;如果存在相對(duì)較多的持久對(duì)象,年老代應(yīng)該適當(dāng)增大匀哄。但很多應(yīng)用都沒有這樣明顯的特性秦效。

在抉擇時(shí)應(yīng)該根 據(jù)以下兩點(diǎn):

(1)本著Full GC盡量少的原則,讓年老代盡量緩存常用對(duì)象拱雏,JVM的默認(rèn)比例1:2也是這個(gè)道理 棉安。

(2)通過觀察應(yīng)用一段時(shí)間,看其他在峰值時(shí)年老代會(huì)占多少內(nèi)存铸抑,在不影響Full GC的前提下贡耽,根據(jù)實(shí)際情況加大年輕代,比如可以把比例控制在1:1鹊汛。但應(yīng)該給年老代至少預(yù)留1/3的增長空間蒲赂。

4.在配置較好的機(jī)器上(比如多核、大內(nèi)存)刁憋,可以為年老代選擇并行收集算法-XX:+UseParallelOldGC滥嘴。

5.線程堆棧的設(shè)置:每個(gè)線程默認(rèn)會(huì)開啟1M的堆棧,用于存放棧幀至耻、調(diào)用參數(shù)若皱、局部變量等镊叁,對(duì)大多數(shù)應(yīng)用而言這個(gè)默認(rèn)值太了,一般256K就足用走触。

理論上晦譬,在內(nèi)存不變的情況下,減少每個(gè)線程的堆棧互广,可以產(chǎn)生更多的線程敛腌,但這實(shí)際上還受限于操作系統(tǒng)。

覺得不錯(cuò)請(qǐng)點(diǎn)贊支持下惫皱。

----end----

以下是JVM系列文章集合像樊,感興趣不妨深入了解,擴(kuò)充知識(shí)棧:

JVM的4種垃圾回收算法旅敷、垃圾回收機(jī)制與總結(jié)

7種JVM垃圾收集器特點(diǎn)生棍,優(yōu)劣勢(shì)、及使用場(chǎng)景

深入詳解JVM內(nèi)存模型與JVM參數(shù)詳細(xì)配置

JVM性能調(diào)優(yōu)的6大步驟扫皱,及關(guān)鍵調(diào)優(yōu)參數(shù)詳解

深入剖析G1收集器+回收流程+推薦用例

我是mike足绅,10年+程序員。曾先后就職于淘寶韩脑、盛大氢妈、百度、攜程?段多,歷任高級(jí)研發(fā)工程師首量、研發(fā)經(jīng)理、架構(gòu)師进苍、事業(yè)部CTO加缘。堅(jiān)持寫文1年多,原創(chuàng)內(nèi)容接近400篇觉啊,目前粉絲總數(shù)7萬+拣宏,主要分享:BAT面試、Java架構(gòu)杠人、招聘資訊等內(nèi)容勋乾。進(jìn)群179961551獲取以下資料~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市嗡善,隨后出現(xiàn)的幾起案子辑莫,更是在濱河造成了極大的恐慌,老刑警劉巖罩引,帶你破解...
    沈念sama閱讀 219,039評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件各吨,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡袁铐,警方通過查閱死者的電腦和手機(jī)揭蜒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門横浑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人忌锯,你說我怎么就攤上這事伪嫁。” “怎么了偶垮?”我有些...
    開封第一講書人閱讀 165,417評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長帝洪。 經(jīng)常有香客問我似舵,道長,這世上最難降的妖魔是什么葱峡? 我笑而不...
    開封第一講書人閱讀 58,868評(píng)論 1 295
  • 正文 為了忘掉前任砚哗,我火速辦了婚禮,結(jié)果婚禮上砰奕,老公的妹妹穿的比我還像新娘蛛芥。我一直安慰自己,他們只是感情好军援,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,892評(píng)論 6 392
  • 文/花漫 我一把揭開白布仅淑。 她就那樣靜靜地躺著,像睡著了一般胸哥。 火紅的嫁衣襯著肌膚如雪涯竟。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,692評(píng)論 1 305
  • 那天空厌,我揣著相機(jī)與錄音庐船,去河邊找鬼。 笑死嘲更,一個(gè)胖子當(dāng)著我的面吹牛筐钟,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播赋朦,決...
    沈念sama閱讀 40,416評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼篓冲,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了北发?” 一聲冷哼從身側(cè)響起纹因,我...
    開封第一講書人閱讀 39,326評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎琳拨,沒想到半個(gè)月后瞭恰,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,782評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡狱庇,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,957評(píng)論 3 337
  • 正文 我和宋清朗相戀三年惊畏,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了恶耽。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,102評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡颜启,死狀恐怖偷俭,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情缰盏,我是刑警寧澤涌萤,帶...
    沈念sama閱讀 35,790評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站口猜,受9級(jí)特大地震影響负溪,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜济炎,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,442評(píng)論 3 331
  • 文/蒙蒙 一川抡、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧须尚,春花似錦崖堤、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至咙咽,卻和暖如春老玛,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背钧敞。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評(píng)論 1 272
  • 我被黑心中介騙來泰國打工蜡豹, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人溉苛。 一個(gè)月前我還...
    沈念sama閱讀 48,332評(píng)論 3 373
  • 正文 我出身青樓镜廉,卻偏偏與公主長得像,于是被迫代替她去往敵國和親愚战。 傳聞我的和親對(duì)象是個(gè)殘疾皇子娇唯,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,044評(píng)論 2 355