【web技術(shù)】Tomcat和JVM的性能調(diào)優(yōu)總結(jié)

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

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

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

2、maxThreads=”300″ :設(shè)置當(dāng)前Tomcat的最大并發(fā)數(shù)媳瞪。Tomcat默認(rèn)配置的最大請求數(shù)是150個骗炉,即同時能支持150個并發(fā)。但是在實(shí)際運(yùn)用中蛇受,最大并發(fā)數(shù)與硬件性能和CPU數(shù)量都有很大關(guān)系的句葵,更好的硬件、更高的處理器都會使Tomcat支持更多的并發(fā)數(shù)兢仰。如果一般在實(shí)際開發(fā)中乍丈,當(dāng)某個應(yīng)用擁有 250 個以上并發(fā)的時候,都會考慮到應(yīng)用服務(wù)器的集群把将。

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

4请垛、acceptCount=”250″ :當(dāng)同時連接的人數(shù)達(dá)到maxThreads參數(shù)設(shè)置的值時催训,還可以接收排隊(duì)的連接數(shù)量,超過這個連接的則直接返回拒絕連接叼屠。指定當(dāng)任何能夠使用的處理請求的線程數(shù)都被使用時瞳腌,能夠放到處理隊(duì)列中的請求數(shù),超過這個數(shù)的請求將不予處理镜雨。默認(rèn)值為100嫂侍。在實(shí)際應(yīng)用中,如果想加大Tomcat的并發(fā)數(shù) 荚坞,應(yīng)該同時加大acceptCount和maxThreads的值挑宠。

5、enableLookups=”false” :是否開啟域名反查颓影,一般設(shè)置為false來提高處理能力各淀,它的取值還有true,一般很少使用诡挂。

6碎浇、maxKeepAliveRequests=”1″ :nginx動態(tài)的轉(zhuǎn)給tomcat,nginx是不能keepalive的璃俗,而tomcat端默認(rèn)開啟了keepalive奴璃,會等待keepalive的timeout,默認(rèn)不設(shè)置就是使用connectionTimeout城豁。 所以必須設(shè)置tomcat的超時時間苟穆,并關(guān)閉tomcat的keepalive。否則會產(chǎn)生大量tomcat的socket timewait唱星。 maxKeepAliveRequests=”1”就可以避免tomcat產(chǎn)生大量的TIME_WAIT連接雳旅,從而從一定程度上避免tomcat假死。

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

Tomcat本身還是運(yùn)行在JVM上的间聊,通過對JVM參數(shù)的調(diào)整我們可以使Tomcat擁有更好的性能攒盈。目前針對JVM的調(diào)優(yōu)主要有兩個方面:內(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)楹竺娴膯訁?shù)會把JAVA_OPTS作為JVM的啟動參數(shù)來處理。再說Java虛擬機(jī)的內(nèi)存結(jié)構(gòu)是有點(diǎn)復(fù)雜的叹话,相信很多人在理解上都是很抽象的偷遗,它主要分為堆墩瞳、棧驼壶、方法區(qū)和垃圾回收系統(tǒng)等幾個部分組成,下面是我從網(wǎng)上扒的內(nèi)存結(jié)構(gòu)圖:

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

1般妙、-Xmx512m :設(shè)置Java虛擬機(jī)的堆的最大可用內(nèi)存大小纪铺,單位:兆(m),整個堆大小=年輕代大小 + 年老代大小 + 持久代大小碟渺。持久代一般固定大小為64m鲜锚。堆的不同分布情況,對系統(tǒng)會產(chǎn)生一定的影響苫拍。盡可能將對象預(yù)留在新生代芜繁,減少老年代GC的次數(shù)(通常老年回收起來比較慢)。實(shí)際工作中绒极,通常將堆的初始值和最大值設(shè)置相等骏令,這樣可以減少程序運(yùn)行時進(jìn)行的垃圾回收次數(shù)和空間擴(kuò)展,從而提高程序性能垄提。

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

3高蜂、-Xmn170m :設(shè)置年輕代內(nèi)存大小聪黎,單位:兆(m),此值對系統(tǒng)性能影響較大备恤,Sun官方推薦配置為整個堆的3/8稿饰。一般在增大年輕代內(nèi)存后,也會將會減小年老代大小露泊。

4喉镰、-Xss128k :設(shè)置每個線程的棧大小。JDK5.0以后每個線程棧大小為1M惭笑,以前每個線程棧大小為256K侣姆。更具應(yīng)用的線程所需內(nèi)存大小進(jìn)行調(diào)整。在相同物理內(nèi)存下沉噩,減小這個值能生成更多的線程捺宗。但是操作系統(tǒng)對一個進(jìn)程內(nèi)的線程數(shù)還是有限制的,不能無限生成川蒙,經(jīng)驗(yàn)值在3000~5000左右蚜厉。

5、 -XX:NewRatio=4 :設(shè)置年輕代(包括Eden和兩個Survivor區(qū))與年老代的比值(除去持久代)畜眨。設(shè)置為4昼牛,則年輕代與年老代所占比值為1:4术瓮,年輕代占整個堆棧的1/5 。

6贰健、-XX:SurvivorRatio=4 :設(shè)置年輕代中Eden區(qū)與Survivor區(qū)的大小比值胞四。設(shè)置為4,則兩個Survivor區(qū)與一個Eden區(qū)的比值為2:4伶椿,一個Survivor區(qū)占整個年輕代的1/6辜伟。

7、-XX:MaxPermSize=16m :設(shè)置持久代大小為16m脊另,上面也說了游昼,持久代一般固定的內(nèi)存大小為64m。

8尝蠕、-XX:MaxTenuringThreshold=0:設(shè)置垃圾最大年齡烘豌。如果設(shè)置為0的話,則年輕代對象不經(jīng)過Survivor區(qū)看彼,直接進(jìn)入年老代廊佩。對于年老代比較多的應(yīng)用,可以提高效率靖榕。如果將此值設(shè)置為一個較大值标锄,則年輕代對象會在Survivor區(qū)進(jìn)行多次復(fù)制,這樣可以增加對象再年輕代的存活時間茁计,增加在年輕代即被回收的概論料皇。

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

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

串行收集器:

1竣贪、-XX:+UseSerialGC:代表垃圾回收策略為串行收集器军洼,即在整個掃描和復(fù)制過程采用單線程的方式來進(jìn)行,適用于單CPU演怎、新生代空間較小及對暫停時間要求不是非常高的應(yīng)用上匕争,是client級別默認(rèn)的GC方式,主要在JDK1.5之前的垃圾回收方式爷耀。

并發(fā)收集器:

1甘桑、-XX:+UseParallelGC:代表垃圾回收策略為并行收集器(吞吐量優(yōu)先),即在整個掃描和復(fù)制過程采用多線程的方式來進(jìn)行,適用于多CPU扇住、對暫停時間要求較短的應(yīng)用上,是server級別默認(rèn)采用的GC方式盗胀。此配置僅對年輕代有效艘蹋。該配置只能讓年輕代使用并發(fā)收集,而年老代仍舊使用串行收集票灰。

2女阀、-XX:ParallelGCThreads=4:配置并行收集器的線程數(shù),即:同時多少個線程一起進(jìn)行垃圾回收屑迂。此值最好配置與處理器數(shù)目相等浸策。

3、-XX:+UseParallelOldGC:配置年老代垃圾收集方式為并行收集惹盼。JDK6.0支持對年老代并行收集 庸汗。

4、-XX:MaxGCPauseMillis=100 :設(shè)置每次年輕代垃圾回收的最長時間手报,如果無法滿足此時間蚯舱,JVM會自動調(diào)整年輕代大小,以滿足此值掩蛤。

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

并發(fā)收集器:

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

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




原文出處:https://cloud.tencent.com/developer/article/1472856

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市冒萄,隨后出現(xiàn)的幾起案子臊岸,更是在濱河造成了極大的恐慌,老刑警劉巖尊流,帶你破解...
    沈念sama閱讀 212,029評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件帅戒,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)逻住,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,395評論 3 385
  • 文/潘曉璐 我一進(jìn)店門钟哥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人瞎访,你說我怎么就攤上這事腻贰。” “怎么了扒秸?”我有些...
    開封第一講書人閱讀 157,570評論 0 348
  • 文/不壞的土叔 我叫張陵播演,是天一觀的道長。 經(jīng)常有香客問我伴奥,道長写烤,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,535評論 1 284
  • 正文 為了忘掉前任拾徙,我火速辦了婚禮洲炊,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘尼啡。我一直安慰自己选浑,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,650評論 6 386
  • 文/花漫 我一把揭開白布玄叠。 她就那樣靜靜地躺著古徒,像睡著了一般。 火紅的嫁衣襯著肌膚如雪读恃。 梳的紋絲不亂的頭發(fā)上隧膘,一...
    開封第一講書人閱讀 49,850評論 1 290
  • 那天,我揣著相機(jī)與錄音寺惫,去河邊找鬼疹吃。 笑死,一個胖子當(dāng)著我的面吹牛西雀,可吹牛的內(nèi)容都是我干的萨驶。 我是一名探鬼主播,決...
    沈念sama閱讀 39,006評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼艇肴,長吁一口氣:“原來是場噩夢啊……” “哼腔呜!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起再悼,我...
    開封第一講書人閱讀 37,747評論 0 268
  • 序言:老撾萬榮一對情侶失蹤核畴,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后冲九,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體谤草,經(jīng)...
    沈念sama閱讀 44,207評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,536評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了丑孩。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片冀宴。...
    茶點(diǎn)故事閱讀 38,683評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖温学,靈堂內(nèi)的尸體忽然破棺而出略贮,到底是詐尸還是另有隱情,我是刑警寧澤枫浙,帶...
    沈念sama閱讀 34,342評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站古拴,受9級特大地震影響箩帚,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜黄痪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,964評論 3 315
  • 文/蒙蒙 一紧帕、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧桅打,春花似錦是嗜、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,772評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至遭铺,卻和暖如春丽柿,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背魂挂。 一陣腳步聲響...
    開封第一講書人閱讀 32,004評論 1 266
  • 我被黑心中介騙來泰國打工甫题, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人涂召。 一個月前我還...
    沈念sama閱讀 46,401評論 2 360
  • 正文 我出身青樓坠非,卻偏偏與公主長得像,于是被迫代替她去往敵國和親果正。 傳聞我的和親對象是個殘疾皇子炎码,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,566評論 2 349

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