2019-11-06 Tomcat和JVM的性能調(diào)優(yōu)總結(jié)

Tomcat性能調(diào)優(yōu):

找到Tomcat根目錄下的conf目錄着饥,修改server.xml文件的內(nèi)容负蠕。對(duì)于這部分的調(diào)優(yōu)锹引,我所了解到的就是無非設(shè)置一下Tomcat服務(wù)器的最大并發(fā)數(shù)和Tomcat初始化時(shí)創(chuàng)建的線程數(shù)的設(shè)置厂财,當(dāng)然還有其他一些性能調(diào)優(yōu)的設(shè)置摩钙,下圖是我根據(jù)我機(jī)子的性能設(shè)置的一些參數(shù)值,給各位詳細(xì)解釋一下吧:

1汹想、URIEncoding=”UTF-8″ :設(shè)置Tomcat的字符集外邓。這種配置我們一般是不會(huì)設(shè)置的,因?yàn)殛P(guān)于亂碼的轉(zhuǎn)換我們會(huì)在具體項(xiàng)目中具體處理古掏,直接修改Tomcat的字符集未免過于太死板损话。

2、maxThreads=”300″ :設(shè)置當(dāng)前Tomcat的最大并發(fā)數(shù)槽唾。Tomcat默認(rèn)配置的最大請(qǐng)求數(shù)是150個(gè)丧枪,即同時(shí)能支持150個(gè)并發(fā)。但是在實(shí)際運(yùn)用中庞萍,最大并發(fā)數(shù)與硬件性能和CPU數(shù)量都有很大關(guān)系的拧烦,更好的硬件、更高的處理器都會(huì)使Tomcat支持更多的并發(fā)數(shù)钝计。如果一般在實(shí)際開發(fā)中恋博,當(dāng)某個(gè)應(yīng)用擁有 250 個(gè)以上并發(fā)的時(shí)候,都會(huì)考慮到應(yīng)用服務(wù)器的集群私恬。

3债沮、minSpareThreads=”50″ :設(shè)置當(dāng)前Tomcat初始化時(shí)創(chuàng)建的線程數(shù),默認(rèn)值為25本鸣。

4疫衩、acceptCount=”250″ :當(dāng)同時(shí)連接的人數(shù)達(dá)到maxThreads參數(shù)設(shè)置的值時(shí),還可以接收排隊(duì)的連接數(shù)量荣德,超過這個(gè)連接的則直接返回拒絕連接闷煤。指定當(dāng)任何能夠使用的處理請(qǐng)求的線程數(shù)都被使用時(shí),能夠放到處理隊(duì)列中的請(qǐng)求數(shù)涮瞻,超過這個(gè)數(shù)的請(qǐng)求將不予處理鲤拿。默認(rèn)值為100。在實(shí)際應(yīng)用中署咽,如果想加大Tomcat的并發(fā)數(shù) 近顷,應(yīng)該同時(shí)加大acceptCount和maxThreads的值。

5艇抠、enableLookups=”false” :是否開啟域名反查幕庐,一般設(shè)置為false來提高處理能力,它的取值還有true家淤,一般很少使用异剥。

6、maxKeepAliveRequests=”1″ :nginx動(dòng)態(tài)的轉(zhuǎn)給tomcat絮重,nginx是不能keepalive的冤寿,而tomcat端默認(rèn)開啟了keepalive歹苦,會(huì)等待keepalive的timeout,默認(rèn)不設(shè)置就是使用connectionTimeout督怜。 所以必須設(shè)置tomcat的超時(shí)時(shí)間殴瘦,并關(guān)閉tomcat的keepalive。否則會(huì)產(chǎn)生大量tomcat的socket timewait号杠。 maxKeepAliveRequests=”1”就可以避免tomcat產(chǎn)生大量的TIME_WAIT連接蚪腋,從而從一定程度上避免tomcat假死。

JVM性能調(diào)優(yōu):

Tomcat本身還是運(yùn)行在JVM上的姨蟋,通過對(duì)JVM參數(shù)的調(diào)整我們可以使Tomcat擁有更好的性能屉凯。目前針對(duì)JVM的調(diào)優(yōu)主要有兩個(gè)方面:內(nèi)存調(diào)優(yōu)和垃圾回收策略調(diào)優(yōu)。

一:內(nèi)存調(diào)優(yōu)  找到Tomcat根目錄下的bin目錄眼溶,設(shè)置catalina.sh文件中JAVA_OPTS變量即可悠砚,因?yàn)楹竺娴膯?dòng)參數(shù)會(huì)把JAVA_OPTS作為JVM的啟動(dòng)參數(shù)來處理。再說Java虛擬機(jī)的內(nèi)存結(jié)構(gòu)是有點(diǎn)復(fù)雜的堂飞,相信很多人在理解上都是很抽象的灌旧,它主要分為堆、棧绰筛、方法區(qū)和垃圾回收系統(tǒng)等幾個(gè)部分組成枢泰,下面是我從網(wǎng)上扒的內(nèi)存結(jié)構(gòu)圖:


內(nèi)存調(diào)優(yōu)這塊呢,無非就是通過修改它們各自的內(nèi)存空間的大小别智,使應(yīng)用能夠更加合理的運(yùn)用宗苍,下圖是我根據(jù)我機(jī)子的性能設(shè)置的參數(shù)稼稿,給各位詳細(xì)解釋一下各個(gè)參數(shù)的含義吧:

1薄榛、-Xmx512m :設(shè)置Java虛擬機(jī)的堆的最大可用內(nèi)存大小,單位:兆(m)让歼,整個(gè)堆大小=年輕代大小 + 年老代大小 + 持久代大小敞恋。持久代一般固定大小為64m。堆的不同分布情況谋右,對(duì)系統(tǒng)會(huì)產(chǎn)生一定的影響硬猫。盡可能將對(duì)象預(yù)留在新生代,減少老年代GC的次數(shù)(通常老年回收起來比較慢)改执。實(shí)際工作中啸蜜,通常將堆的初始值和最大值設(shè)置相等,這樣可以減少程序運(yùn)行時(shí)進(jìn)行的垃圾回收次數(shù)和空間擴(kuò)展辈挂,從而提高程序性能衬横。

2、-Xms512m :設(shè)置Java虛擬機(jī)的堆的初始值內(nèi)存大小终蒂,單位:兆(m)蜂林,此值可以設(shè)置與-Xmx相同遥诉,以避免每次垃圾回收完成后JVM重新分配內(nèi)存。

3噪叙、-Xmn170m :設(shè)置年輕代內(nèi)存大小矮锈,單位:兆(m),此值對(duì)系統(tǒng)性能影響較大睁蕾,Sun官方推薦配置為整個(gè)堆的3/8苞笨。一般在增大年輕代內(nèi)存后,也會(huì)將會(huì)減小年老代大小子眶。

4猫缭、-Xss128k :設(shè)置每個(gè)線程的棧大小。JDK5.0以后每個(gè)線程棧大小為1M壹店,以前每個(gè)線程棧大小為256K猜丹。更具應(yīng)用的線程所需內(nèi)存大小進(jìn)行調(diào)整。在相同物理內(nèi)存下硅卢,減小這個(gè)值能生成更多的線程射窒。但是操作系統(tǒng)對(duì)一個(gè)進(jìn)程內(nèi)的線程數(shù)還是有限制的,不能無限生成将塑,經(jīng)驗(yàn)值在3000~5000左右脉顿。

5、 -XX:NewRatio=4 :設(shè)置年輕代(包括Eden和兩個(gè)Survivor區(qū))與年老代的比值(除去持久代)点寥。設(shè)置為4艾疟,則年輕代與年老代所占比值為1:4,年輕代占整個(gè)堆棧的1/5 敢辩。

6蔽莱、-XX:SurvivorRatio=4 :設(shè)置年輕代中Eden區(qū)與Survivor區(qū)的大小比值。設(shè)置為4戚长,則兩個(gè)Survivor區(qū)與一個(gè)Eden區(qū)的比值為2:4盗冷,一個(gè)Survivor區(qū)占整個(gè)年輕代的1/6。

7同廉、-XX:MaxPermSize=16m :設(shè)置持久代大小為16m仪糖,上面也說了,持久代一般固定的內(nèi)存大小為64m迫肖。

8锅劝、-XX:MaxTenuringThreshold=0:設(shè)置垃圾最大年齡。如果設(shè)置為0的話蟆湖,則年輕代對(duì)象不經(jīng)過Survivor區(qū)故爵,直接進(jìn)入年老代。對(duì)于年老代比較多的應(yīng)用帐姻,可以提高效率稠集。如果將此值設(shè)置為一個(gè)較大值奶段,則年輕代對(duì)象會(huì)在Survivor區(qū)進(jìn)行多次復(fù)制,這樣可以增加對(duì)象再年輕代的存活時(shí)間剥纷,增加在年輕代即被回收的概論痹籍。

二:垃圾回收策略調(diào)優(yōu)  找到Tomcat根目錄下的bin目錄,也是設(shè)置catalina.sh文件中JAVA_OPTS變量即可晦鞋。我們都知道Java虛擬機(jī)都有默認(rèn)的垃圾回收機(jī)制蹲缠,但是不同的垃圾回收機(jī)制的效率是不同的,正是因?yàn)檫@點(diǎn)我們才經(jīng)常對(duì)Java虛擬機(jī)的垃圾回收策略進(jìn)行相應(yīng)的調(diào)整悠垛。下面也是通過我的一些需求來配置的垃圾回收策略:

Java虛擬機(jī)的垃圾回收策略一般分為:串行收集器线定、并行收集器和并發(fā)收集器。

串行收集器:

1确买、-XX:+UseSerialGC:代表垃圾回收策略為串行收集器斤讥,即在整個(gè)掃描和復(fù)制過程采用單線程的方式來進(jìn)行,適用于單CPU湾趾、新生代空間較小及對(duì)暫停時(shí)間要求不是非常高的應(yīng)用上芭商,是client級(jí)別默認(rèn)的GC方式,主要在JDK1.5之前的垃圾回收方式搀缠。

并發(fā)收集器:

1铛楣、-XX:+UseParallelGC:代表垃圾回收策略為并行收集器(吞吐量優(yōu)先),即在整個(gè)掃描和復(fù)制過程采用多線程的方式來進(jìn)行艺普,適用于多CPU簸州、對(duì)暫停時(shí)間要求較短的應(yīng)用上,是server級(jí)別默認(rèn)采用的GC方式歧譬。此配置僅對(duì)年輕代有效岸浑。該配置只能讓年輕代使用并發(fā)收集,而年老代仍舊使用串行收集缴罗。

2助琐、-XX:ParallelGCThreads=4:配置并行收集器的線程數(shù)祭埂,即:同時(shí)多少個(gè)線程一起進(jìn)行垃圾回收面氓。此值最好配置與處理器數(shù)目相等。

3蛆橡、-XX:+UseParallelOldGC:配置年老代垃圾收集方式為并行收集舌界。JDK6.0支持對(duì)年老代并行收集 。

4泰演、-XX:MaxGCPauseMillis=100 :設(shè)置每次年輕代垃圾回收的最長時(shí)間呻拌,如果無法滿足此時(shí)間,JVM會(huì)自動(dòng)調(diào)整年輕代大小睦焕,以滿足此值藐握。

5靴拱、-XX:+UseAdaptiveSizePolicy:設(shè)置此選項(xiàng)后,并行收集器會(huì)自動(dòng)選擇年輕代區(qū)大小和相應(yīng)的Survivor區(qū)比例猾普,以達(dá)到目標(biāo)系統(tǒng)規(guī)定的最低相應(yīng)時(shí)間或者收集頻率等袜炕,此值建議使用并行收集器時(shí),一直打開初家。

并發(fā)收集器:

1偎窘、-XX:+UseConcMarkSweepGC:代表垃圾回收策略為并發(fā)收集器。

好了溜在,到此我對(duì)虛擬機(jī)的垃圾回收策略總結(jié)就這么多陌知,還是這句話:優(yōu)化的學(xué)習(xí)一直在路上,下面還有一張從其他博客中偷到的圖掖肋,據(jù)說以上三種GC機(jī)制是需要配合使用的仆葡。

參考:https://cloud.tencent.com/developer/article/1346964

GC調(diào)優(yōu)

調(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)化;

?2皇耗,分析結(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)化毙死;

?3条辟,調(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ì)性的做出最后選擇氧映;

4春畔,不斷的分析和調(diào)整

通過不斷的試驗(yàn)和試錯(cuò),分析并找到最合適的參數(shù)

5,全面應(yīng)用參數(shù)

如果找到了最合適的參數(shù)律姨,則將這些參數(shù)應(yīng)用到所有服務(wù)器振峻,并進(jìn)行后續(xù)跟蹤。

目的

GC的時(shí)間夠小

GC的次數(shù)夠少

發(fā)生Full GC的周期足夠的長择份,時(shí)間合理铺韧,最好是不發(fā)生。

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

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

? ?Minor GC執(zhí)行不頻繁,約10秒一次讯壶;

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

? ?Full GC執(zhí)行頻率不算頻繁,不低于10分鐘1次伏蚊;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末立轧,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子躏吊,更是在濱河造成了極大的恐慌氛改,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,542評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件比伏,死亡現(xiàn)場離奇詭異胜卤,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)赁项,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門葛躏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人悠菜,你說我怎么就攤上這事舰攒。” “怎么了悔醋?”我有些...
    開封第一講書人閱讀 163,912評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵摩窃,是天一觀的道長。 經(jīng)常有香客問我芬骄,道長猾愿,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,449評(píng)論 1 293
  • 正文 為了忘掉前任德玫,我火速辦了婚禮匪蟀,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘宰僧。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評(píng)論 6 392
  • 文/花漫 我一把揭開白布琴儿。 她就那樣靜靜地躺著段化,像睡著了一般。 火紅的嫁衣襯著肌膚如雪造成。 梳的紋絲不亂的頭發(fā)上显熏,一...
    開封第一講書人閱讀 51,370評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音晒屎,去河邊找鬼喘蟆。 笑死,一個(gè)胖子當(dāng)著我的面吹牛鼓鲁,可吹牛的內(nèi)容都是我干的蕴轨。 我是一名探鬼主播,決...
    沈念sama閱讀 40,193評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼骇吭,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼橙弱!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起燥狰,我...
    開封第一講書人閱讀 39,074評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤棘脐,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后龙致,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蛀缝,經(jīng)...
    沈念sama閱讀 45,505評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評(píng)論 3 335
  • 正文 我和宋清朗相戀三年目代,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了内斯。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,841評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡像啼,死狀恐怖俘闯,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情忽冻,我是刑警寧澤真朗,帶...
    沈念sama閱讀 35,569評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站僧诚,受9級(jí)特大地震影響遮婶,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜湖笨,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評(píng)論 3 328
  • 文/蒙蒙 一旗扑、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧慈省,春花似錦臀防、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽捎废。三九已至,卻和暖如春致燥,著一層夾襖步出監(jiān)牢的瞬間登疗,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評(píng)論 1 269
  • 我被黑心中介騙來泰國打工嫌蚤, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留辐益,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,962評(píng)論 2 370
  • 正文 我出身青樓脱吱,卻偏偏與公主長得像智政,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子急凰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評(píng)論 2 354

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

  • Tomcat性能調(diào)優(yōu): 找到Tomcat根目錄下的conf目錄女仰,修改server.xml文件的內(nèi)容。對(duì)于這部分的調(diào)...
    中書大令閱讀 210評(píng)論 0 0
  • Tomcat 的缺省配置是不能穩(wěn)定長期運(yùn)行的抡锈,也就是不適合生產(chǎn)環(huán)境疾忍,它會(huì)死機(jī),讓你不斷重新啟動(dòng)床三,甚至在午夜時(shí)分喚醒...
    憤怒的_菜鳥閱讀 2,118評(píng)論 0 24
  • 堆內(nèi)存設(shè)置 原理 JVM堆內(nèi)存分為2塊:Permanent Space 和 Heap Space一罩。 Permane...
    superxcp閱讀 2,001評(píng)論 0 0
  • “回眸一笑百媚生,六宮粉黛無顏色” 說起“粉黛”,是否會(huì)讓你聯(lián)想到年輕貌美的女子呢撇簿? 直到我身臨其境后聂渊,才明白婆婆...
    斌霖Q緣閱讀 222評(píng)論 0 2
  • 火鍋可以一個(gè)人吃,電影可以一個(gè)人看四瘫,我不怕孤獨(dú)汉嗽,我現(xiàn)在遇到任何事都比愛你更輕松。
    華尹閱讀 160評(píng)論 0 1