Centos Tomcat 調(diào)優(yōu)

Tomcat可以從內(nèi)存、并發(fā)显设、緩存等方面進行優(yōu)化

1、Tomcat內(nèi)存優(yōu)化:

在tomcat的啟動腳本catalina.sh中設(shè)置java_OPTS參數(shù)

JAVA_OPTS=’-Xms2048m-Xmx2048m -XX:PermSize=512M -XX:MaxPermSize=1024m’

參數(shù)說明:

-server啟用jdk的server版;

-XmsJava虛擬機初始化時的最小內(nèi)存虑绵;

-Xmx ???????????????????????????????????????????????????? Java虛擬機可使用的最大內(nèi)存;

-XX:PermSize內(nèi)存永久保留區(qū)域

-XX:MaxPermSize內(nèi)存最大永久保留區(qū)域

驗證:

設(shè)置成功后我們可以利用JDK自帶的工具進行驗證闽烙,這些工具都在JAVA_HOME/bin目錄下:

1)jps:用來顯示本地的java進程翅睛,以及進程號,進程啟動的路徑等黑竞。

2)jmap:觀察運行中的JVM物理內(nèi)存的占用情況捕发,包括Heapsize , Perm size下載地址等。

進入JAVA_HOME/bin目錄下或者使用軟鏈接等方式很魂,然后輸入jps和jmap命令扎酷。

2、Tomcat并發(fā)優(yōu)化:

Connector優(yōu)化

Connector是連接器遏匆,負責接收客戶的請求法挨,以及向客戶端回送響應(yīng)的消息。所以Connector的優(yōu)化是重要部分幅聘。默認情況下Tomcat只支持200線程訪問凡纳,超過這個數(shù)量的連接將被等待甚至超時放棄,所以我們需要提高這方面的處理能力帝蒿。

Tomcat官網(wǎng)Connector參數(shù)屬性:https://tomcat.apache.org/tomcat-8.0-doc/config/http.html荐糜,參數(shù)非常多,我們這里只介紹一些常用的

protocol="HTTP/1.1"

maxHttpHeaderSize="8192"

maxThreads="1000"

minSpareThreads="100"

maxSpareThreads="1000"

connectionTimeout="20000"

minProcessors="100"

maxProcessors="1000"

enableLookups="false"

URIEncoding="utf-8"

acceptCount="1000"

redirectPort="8443"

disableUploadTimeout="true"/>

參數(shù)說明:

port代表Tomcat監(jiān)聽端口葛超,也就是網(wǎng)站的訪問端口暴氏,默認為8080,可以根據(jù)需要改成其他

protocol代表協(xié)議類型绣张,可選類型有四種偏序,分別為BIO(阻塞型IO),NIO胖替,NIO2和APR

maxHttpHeaderSize請求和響應(yīng)的HTTP頭的最大大小研儒,以字節(jié)為單位指定。如果沒有指定独令,這個屬性被設(shè)置為8192(8 KB)端朵。

maxThreads客戶請求最大線程數(shù),也就是可以處理的同時請求的最大數(shù)目燃箭,如果未指定冲呢,默認為200

minSpareThreads ?????????????????? ????????????? Tomcat初始化時創(chuàng)建的socket線程數(shù),線程的最小運行數(shù)目招狸,這些始終保持運行敬拓,如果未指定邻薯,默認值為10

maxSpareThreads ??????????????????????????????? Tomcat連接器的最大空閑socket線程數(shù)

connectionTimeout代表連接超時時間,單位為毫秒乘凸,默認值為60000厕诡。通常情況下設(shè)置為30000

minProcessors服務(wù)器創(chuàng)建時的最小處理線程數(shù)

maxProcessors服務(wù)器同時最大處理線程數(shù)

enableLookups關(guān)閉DNS反向查詢,若設(shè)為true,則支持域名解析营勤,可把ip地址解析為主機名

URIEncoding ??????????????????????????????????????? URL統(tǒng)一編碼

acceptCount監(jiān)聽端口隊列最大數(shù)灵嫌,滿了之后客戶請求會被拒絕(不能小于maxSpareThreads),如果未指定葛作,默認值為100

redirectPort在需要基于安全通道的場合寿羞,把客戶請求轉(zhuǎn)發(fā)到基于SSL的redirectPort端口

disableUploadTimeout這個標志允許servletContainer在一個servlet執(zhí)行的時候,使用一個不同的赂蠢,更長的連接超時绪穆。最終的結(jié)果是給servlet更長的時間以便完成其執(zhí)行,或者在數(shù)據(jù)上載的時候更長的超時時間虱岂。如果沒有指定玖院,設(shè)為false。

參數(shù)詳解:

1)protocol

a)BIO:BIO(BlockingI/O)量瓜,顧名思義司恳,即阻塞式I/O操作,表示Tomcat使用的是傳統(tǒng)的JavaI/O操作(即java.io包及其子包)绍傲。Tomcat在默認情況下扔傅,是以bio模式運行的。遺憾的是烫饼,就一般而言猎塞,bio模式是三種運行模式中性能最低的一種。BIO配置采用默認即可杠纵。

b)NIO:NIO(NewI/O)荠耽,是Java SE1.4及后續(xù)版本提供的一種新的I/O操作方式(即java.nio包及其子包)。Javanio是一個基于緩沖區(qū)比藻、并能提供非阻塞I/O操作的JavaAPI铝量,因此nio也被看成是non-blockingI/O的縮寫。它擁有比傳統(tǒng)I/O操作(bio)更好的并發(fā)運行性能银亲。要讓Tomcat以nio模式來運行也比較簡單慢叨,我們只需要protocol類型修改為:

//NIO

protocol="org.apache.coyote.http11.Http11NioProtocol"

//NIO2

protocol="org.apache.coyote.http11.Http11Nio2Protocol"

c)APR:APR(ApachePortable Runtime/Apache可移植運行時),是ApacheHTTP服務(wù)器的支持庫务蝠。你可以簡單地理解為:Tomcat將以JNI的形式調(diào)用Apache HTTP服務(wù)器的核心動態(tài)鏈接庫來處理文件讀取或網(wǎng)絡(luò)傳輸操作拍谐,從而大大地提高Tomcat對靜態(tài)文件的處理性能。與配置NIO運行模式一樣,也需要將對應(yīng)的Connector節(jié)點的protocol屬性值改為:

protocol="org.apache.coyote.http11.Http11AprProtocol"

2)maxThreads:由該連接器創(chuàng)建的處理請求線程的最大數(shù)目轩拨,也就是可以處理的同時請求的最大數(shù)目践瓷。如果未配置默認值為200。如果一個執(zhí)行器與此連接器關(guān)聯(lián)亡蓉,則忽略此屬性晕翠,因為該屬性將被忽略,所以該連接器將使用執(zhí)行器而不是一個內(nèi)部線程池來執(zhí)行任務(wù)寸宵。maxThreads是一個重要的配置屬性崖面,maxThreads配置的合理直接影響了Tomcat的相關(guān)性能元咙,所以這里我們重點討論下梯影。

maxThreads并不是配置的越大越好,事實上你即使配置成999999也是沒有用的庶香,因為這個最大值是受操作系統(tǒng)及相關(guān)硬件所制約的甲棍,并且最大值并不一定是最優(yōu)值,所以我們追尋的應(yīng)該是最優(yōu)值而不是最大值赶掖。

QPS(Query Per Second):每秒查詢率QPS是對一個特定的查詢服務(wù)器在規(guī)定時間內(nèi)所處理流量多少的衡量標準感猛。我們常常使用QPS值來衡量一個服務(wù)器的性能。

QPS =并發(fā)數(shù)/平均響應(yīng)時間

或者

并發(fā)數(shù)= QPS *平均響應(yīng)時間

一個系統(tǒng)吞吐量通常由QPS奢赂、并發(fā)數(shù)兩個因素決定陪白,每套系統(tǒng)的這兩個值都有一個相對極限值,在應(yīng)用場景訪問壓力下膳灶,只要某一項達到系統(tǒng)最高值咱士,系統(tǒng)的吞吐量就上不去了,如果壓力繼續(xù)增大轧钓,系統(tǒng)的吞吐量反而會下降序厉,原因是系統(tǒng)超負荷工作,上下文切換毕箍、內(nèi)存等等其它消耗導致系統(tǒng)性能下降弛房。所謂吞吐量這里可以理解為每秒能處理請求的次數(shù)。

所以選擇一個合理的maxThreads值而柑,其實并不是那么容易的事文捶。因為過多的線程只會造成,更多的內(nèi)存開銷媒咳,更多的CPU開銷粹排,但是對提升QPS確毫無幫助;找到最佳線程數(shù)后通過簡單的設(shè)置伟葫,可以讓web系統(tǒng)更加穩(wěn)定恨搓,得到最高,最穩(wěn)定的QPS輸出。

我們可以通過以下幾種方式來獲取maxThreads的最佳值:

(1)通過線上系統(tǒng)不斷使用和用戶的不斷增長來進行性能測試斧抱,觀察QPS常拓,響應(yīng)時間,這種方式會在爆發(fā)式增長時系統(tǒng)崩潰辉浦,如雙12等弄抬。

(2)根據(jù)公式計算,服務(wù)器端最佳線程數(shù)量=((線程等待時間+線程cpu時間)/線程cpu時間) *cpu數(shù)量宪郊,這種方式有時會被誤導掂恕,因為某些系統(tǒng)處理環(huán)節(jié)可能會耗時比較長,從而影響公式的結(jié)果弛槐。

(3)單懊亡、多用戶壓力測試,查看CPU的消耗乎串,然后直接乘以百分比店枣,再進行壓測,一般這個值的附近應(yīng)該就是最佳線程數(shù)量叹誉,這種方式理想場景比較適用鸯两,實際情況會比這個復(fù)雜的多。

(4)根據(jù)系統(tǒng)的自身情況調(diào)整长豁,如硬件限制钧唐,系統(tǒng)限制,程序處理能力限制等匠襟。

(5)定期修改為不同的maxThreads值钝侠,看服務(wù)器響應(yīng)結(jié)果及用戶反應(yīng)。

QPS和線程數(shù)的關(guān)系

(1)在最佳線程數(shù)量之前宅此,QPS和線程是互相遞增的關(guān)系机错,線程數(shù)量到了最佳線程之后,QPS持平父腕,不在上升弱匪,甚至略有下降,同時相應(yīng)時間持續(xù)上升璧亮。

(2)同一個系統(tǒng)而言萧诫,支持的線程數(shù)越多(最佳線程數(shù)越多而不是配置的線程數(shù)越多),QPS越高枝嘶。

QPS和響應(yīng)時間的關(guān)系

(1)對于一般的web系統(tǒng)帘饶,響應(yīng)時間一般有CPU執(zhí)行時間+IO等待時間組成。

(2)CPU的執(zhí)行時間減少群扶,對QPS有實質(zhì)的提升及刻,IO時間的減少镀裤,對QPS提升不明顯。如果要想明顯提升QPS缴饭,優(yōu)化系統(tǒng)的時候要著重優(yōu)化CPU消耗大戶暑劝。

所以想要找出maxThreads的最優(yōu)值可并不容易,沒有最好只有更好颗搂,更好的值只能通過時間來顯現(xiàn)担猛,如果你不想考慮那么多,一般情況下設(shè)置成1000即可丢氢。

3)acceptCount:當所有可能的請求處理線程都在使用時傳入連接請求的最大隊列長度傅联。如果未指定,默認值為100疚察。一般是設(shè)置的跟maxThreads一樣或一半蒸走,此值設(shè)置的過大會導致排隊的請求超時而未被處理。所以這個值應(yīng)該是主要根據(jù)應(yīng)用的訪問峰值與平均值來權(quán)衡配置稍浆。

4)maxConnections:在任何給定的時間內(nèi)载碌,服務(wù)器將接受和處理的最大連接數(shù)猜嘱。當這個數(shù)字已經(jīng)達到時衅枫,服務(wù)器將接受但不處理,等待進一步連接朗伶。NIO與NIO2的默認值為10000弦撩,APR默認值為8192。

3论皆、Tomcat緩存優(yōu)化:

compression="on"

compressionMinSize="2048"

compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"

connectionTimeout="20000"

參數(shù)說明:

compression打開壓縮功能

compressionMinSize啟用壓縮的輸出內(nèi)容大小益楼,這里面默認為2KB

compressableMimeType壓縮類型

connectionTimeout定義建立客戶連接超時的時間.如果為-1,表示不限制建立客戶連接的時間

整合的配置:

protocol="HTTP/1.1"

maxHttpHeaderSize="8192"

maxThreads="1000"

minSpareThreads="100"

maxSpareThreads="1000"

minProcessors="100"

maxProcessors="1000"

enableLookups="false"

compression="on"

compressionMinSize="2048"

compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"

connectionTimeout="20000"

URIEncoding="utf-8"

acceptCount="1000"

redirectPort="8443"

disableUploadTimeout="true"/>

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市点晴,隨后出現(xiàn)的幾起案子感凤,更是在濱河造成了極大的恐慌,老刑警劉巖粒督,帶你破解...
    沈念sama閱讀 221,548評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件陪竿,死亡現(xiàn)場離奇詭異,居然都是意外死亡屠橄,警方通過查閱死者的電腦和手機族跛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來锐墙,“玉大人礁哄,你說我怎么就攤上這事∠保” “怎么了桐绒?”我有些...
    開封第一講書人閱讀 167,990評論 0 360
  • 文/不壞的土叔 我叫張陵夺脾,是天一觀的道長。 經(jīng)常有香客問我茉继,道長劳翰,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,618評論 1 296
  • 正文 為了忘掉前任馒疹,我火速辦了婚禮佳簸,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘颖变。我一直安慰自己生均,他們只是感情好,可當我...
    茶點故事閱讀 68,618評論 6 397
  • 文/花漫 我一把揭開白布腥刹。 她就那樣靜靜地躺著马胧,像睡著了一般。 火紅的嫁衣襯著肌膚如雪衔峰。 梳的紋絲不亂的頭發(fā)上佩脊,一...
    開封第一講書人閱讀 52,246評論 1 308
  • 那天,我揣著相機與錄音垫卤,去河邊找鬼威彰。 笑死,一個胖子當著我的面吹牛穴肘,可吹牛的內(nèi)容都是我干的歇盼。 我是一名探鬼主播,決...
    沈念sama閱讀 40,819評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼评抚,長吁一口氣:“原來是場噩夢啊……” “哼豹缀!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起慨代,我...
    開封第一講書人閱讀 39,725評論 0 276
  • 序言:老撾萬榮一對情侶失蹤邢笙,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后侍匙,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體氮惯,經(jīng)...
    沈念sama閱讀 46,268評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,356評論 3 340
  • 正文 我和宋清朗相戀三年丈积,在試婚紗的時候發(fā)現(xiàn)自己被綠了筐骇。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,488評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡江滨,死狀恐怖铛纬,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情唬滑,我是刑警寧澤告唆,帶...
    沈念sama閱讀 36,181評論 5 350
  • 正文 年R本政府宣布棺弊,位于F島的核電站,受9級特大地震影響擒悬,放射性物質(zhì)發(fā)生泄漏模她。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,862評論 3 333
  • 文/蒙蒙 一懂牧、第九天 我趴在偏房一處隱蔽的房頂上張望侈净。 院中可真熱鬧,春花似錦僧凤、人聲如沸畜侦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽旋膳。三九已至,卻和暖如春途事,著一層夾襖步出監(jiān)牢的瞬間验懊,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評論 1 272
  • 我被黑心中介騙來泰國打工尸变, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留义图,地道東北人。 一個月前我還...
    沈念sama閱讀 48,897評論 3 376
  • 正文 我出身青樓振惰,卻偏偏與公主長得像歌溉,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子骑晶,可洞房花燭夜當晚...
    茶點故事閱讀 45,500評論 2 359

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)草慧,斷路器桶蛔,智...
    卡卡羅2017閱讀 134,696評論 18 139
  • Tomcat 的缺省配置是不能穩(wěn)定長期運行的,也就是不適合生產(chǎn)環(huán)境漫谷,它會死機仔雷,讓你不斷重新啟動,甚至在午夜時分喚醒...
    憤怒的_菜鳥閱讀 2,122評論 0 24
  • Tomcat 的缺省配置是不能穩(wěn)定長期運行的舔示,也就是不適合生產(chǎn)環(huán)境碟婆,它會死機,讓你不斷重新啟動惕稻,甚至在午夜時分喚醒...
    java面試收割機閱讀 1,200評論 0 8
  • 常見的http服務(wù)器有apache竖共,nginx,iis俺祠,tomcat等公给。HTTP服務(wù)器本質(zhì)上也是一種應(yīng)用程序——它...
    可樂愛上咖啡閱讀 3,982評論 1 49
  • 從三月份找實習到現(xiàn)在借帘,面了一些公司,掛了不少淌铐,但最終還是拿到小米肺然、百度、阿里腿准、京東际起、新浪、CVTE吐葱、樂視家的研發(fā)崗...
    時芥藍閱讀 42,274評論 11 349