2019-03-28tomcat優(yōu)化

閑談Tomcat性能優(yōu)化

Tomcat在各位JavaWeb從業(yè)者常常就是默認(rèn)的開(kāi)發(fā)環(huán)境莲绰,但是Tomcat的默認(rèn)配置作為生產(chǎn)環(huán)境,尤其是內(nèi)存和線程的配置,默認(rèn)都很低妖啥,容易成為性能瓶頸.

幸好Tomcat還有很多的提升空間.下文介紹一下Tomcat優(yōu)化,可以分為內(nèi)存,線程,IO.

一:Tomcat內(nèi)存優(yōu)化,啟動(dòng)時(shí)告訴JVM我要一塊大內(nèi)存(調(diào)優(yōu)內(nèi)存是最直接的方式)

Windows 下的catalina.bat

Linux 下的catalina.sh 如:

JAVA_OPTS='-Xms256m -Xmx512m'

-Xms<size> JVM初始化堆的大小

-Xmx<size> JVM堆的最大值 實(shí)際參數(shù)大小根據(jù)服務(wù)器配置或者項(xiàng)目具體設(shè)置.

二:Tomcat 線程優(yōu)化 在server.xml中 如:

<Connector port="80" protocol="HTTP/1.1" maxThreads="600" minSpareThreads="100" maxSpareThreads="500" acceptCount="700"
connectionTimeout="20000"  />

maxThreads="X" 表示最多同時(shí)處理X個(gè)連接

minSpareThreads="X" 初始化X個(gè)連接

maxSpareThreads="X" 表示如果最多可以有X個(gè)線程,一旦超過(guò)X個(gè),則會(huì)關(guān)閉不在需要的線程

acceptCount="X" 當(dāng)同時(shí)連接的人數(shù)達(dá)到maxThreads時(shí),還可以排隊(duì),隊(duì)列大小為X.超過(guò)X就不處理

三:Tomcat IO優(yōu)化

1:同步阻塞IO(JAVA BIO) 同步并阻塞对碌,服務(wù)器實(shí)現(xiàn)模式為一個(gè)連接一個(gè)線程(one connection one thread 想想都覺(jué)得恐怖,線程可是非常寶貴的資源)荆虱,當(dāng)然可以通過(guò)線程池機(jī)制改善.

2:JAVA NIO:又分為同步非阻塞IO,異步阻塞IO 與BIO最大的區(qū)別one request one thread.可以復(fù)用同一個(gè)線程處理多個(gè)connection(多路復(fù)用).

3:,異步非阻塞IO(Java NIO2又叫AIO) 主要與NIO的區(qū)別主要是操作系統(tǒng)的底層區(qū)別.可以做個(gè)比喻:比作快遞,NIO就是網(wǎng)購(gòu)后要自己到官網(wǎng)查下快遞是否已經(jīng)到了(可能是多次)朽们,然后自己去取快遞怀读;AIO就是快遞員送貨上門(mén)了(不用關(guān)注快遞進(jìn)度)。

BIO方式適用于連接數(shù)目比較小且固定的架構(gòu)骑脱,這種方式對(duì)服務(wù)器資源要求比較高菜枷,并發(fā)局限于應(yīng)用中,JDK1.4以前的唯一選擇叁丧,但程序直觀簡(jiǎn)單易理解.

NIO方式適用于連接數(shù)目多且連接比較短(輕操作)的架構(gòu)啤誊,比如聊天服務(wù)器,并發(fā)局限于應(yīng)用中拥娄,編程比較復(fù)雜蚊锹,JDK1.4開(kāi)始支持.

AIO方式使用于連接數(shù)目多且連接比較長(zhǎng)(重操作)的架構(gòu),比如相冊(cè)服務(wù)器稚瘾,充分調(diào)用OS參與并發(fā)操作牡昆,編程比較復(fù)雜,JDK7開(kāi)始支持.

在server.xml中

<Connector port="80" protocol="org.apache.coyote.http11.Http11NioProtocol" 
    connectionTimeout="20000" 
    URIEncoding="UTF-8" 
    useBodyEncodingForURI="true" 
    enableLookups="false" 
    redirectPort="8443" />

實(shí)現(xiàn)對(duì)Tomcat的IO切換.

四:大殺器APR

APR是從操作系統(tǒng)級(jí)別來(lái)解決異步的IO問(wèn)題,大幅度的提高性能. (http://apr.apache.org/).

APR(Apache Portable Runtime)是一個(gè)高可移植庫(kù),它是Apache HTTP Server 2.x的核心.能更好地和其它本地web技術(shù)集成孟抗,總體上讓Java更有效率作為一個(gè)高性能web服務(wù)器平臺(tái)而不是簡(jiǎn)單作為后臺(tái)容器.

在產(chǎn)品環(huán)境中迁杨,特別是直接使用Tomcat做WEB服務(wù)器的時(shí)候钻心,應(yīng)該使用Tomcat Native來(lái)提高其性能.如果不配APR,基本上300個(gè)線程狠快就會(huì)用滿铅协,以后的請(qǐng)求就只好等待.但是配上APR之后捷沸,并發(fā)的線程數(shù)量明顯下降,從原來(lái)的300可能會(huì)馬上下降到只有幾十狐史,新的請(qǐng)求會(huì)毫無(wú)阻塞的進(jìn)來(lái).

在局域網(wǎng)環(huán)境測(cè)痒给,就算是400個(gè)并發(fā),也是一瞬間就處理/傳輸完畢骏全,但是在真實(shí)的Internet環(huán)境下,頁(yè)面處理時(shí)間只占0.1%都不到姜贡,絕大部分時(shí)間都用來(lái)頁(yè)面?zhèn)鬏?如果不用APR,一個(gè)線程同一時(shí)間只能處理一個(gè)用戶楼咳,勢(shì)必會(huì)造成阻塞。所以生產(chǎn)環(huán)境下用apr是非常必要的.

安裝Apache Tomcat Native Library母怜,直接啟動(dòng)就支持apr(http://tomcat.apache.org/native-doc/)它本身是基于APR的%E5%AE%83%E6%9C%AC%E8%BA%AB%E6%98%AF%E5%9F%BA%E4%BA%8EAPR%E7%9A%84). 具體安裝方法可以參考其他博客和文章. 排除代碼問(wèn)題Tomcat優(yōu)化到這個(gè)層次,可以應(yīng)對(duì)大部分性能需求.

最后一句話"再牛B的服務(wù)器,也頂不住一個(gè)傻B的代碼".優(yōu)化的前提條件是良好的代碼質(zhì)量和設(shè)計(jì).
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末余耽,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子苹熏,更是在濱河造成了極大的恐慌,老刑警劉巖轨域,帶你破解...
    沈念sama閱讀 217,084評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異干发,居然都是意外死亡扛邑,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)铐然,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人搀暑,你說(shuō)我怎么就攤上這事∽缘悖” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,450評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵桂敛,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我术唬,道長(zhǎng),這世上最難降的妖魔是什么粗仓? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,322評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮借浊,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蚂斤。我一直安慰自己,他們只是感情好曙蒸,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,370評(píng)論 6 390
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著具滴,像睡著了一般。 火紅的嫁衣襯著肌膚如雪构韵。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,274評(píng)論 1 300
  • 那天疲恢,我揣著相機(jī)與錄音瓷胧,去河邊找鬼显拳。 笑死搓萧,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的瘸洛。 我是一名探鬼主播,決...
    沈念sama閱讀 40,126評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼反肋,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起畅形,我...
    開(kāi)封第一講書(shū)人閱讀 38,980評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤诉探,失蹤者是張志新(化名)和其女友劉穎日熬,沒(méi)想到半個(gè)月后阵具,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體碍遍,經(jīng)...
    沈念sama閱讀 45,414評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡阳液,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,599評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了东跪。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,773評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡虽填,死狀恐怖曹动,靈堂內(nèi)的尸體忽然破棺而出斋日,到底是詐尸還是另有隱情,我是刑警寧澤墓陈,帶...
    沈念sama閱讀 35,470評(píng)論 5 344
  • 正文 年R本政府宣布恶守,位于F島的核電站,受9級(jí)特大地震影響兔港,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜衫樊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,080評(píng)論 3 327
  • 文/蒙蒙 一利花、第九天 我趴在偏房一處隱蔽的房頂上張望科侈。 院中可真熱鬧炒事,春花似錦、人聲如沸羡洛。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,713評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)崭闲。三九已至威蕉,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間韧涨,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,852評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工虑粥, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人娩贷。 一個(gè)月前我還...
    沈念sama閱讀 47,865評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像茁瘦,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子甜熔,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,689評(píng)論 2 354

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