??? 本文是就Tomcat 4為基礎(chǔ)向大家介紹WEB容器調(diào)優(yōu)的,因?yàn)樵S多朋友安裝好之后就開(kāi)始正式上線,很少有人以用戶現(xiàn)場(chǎng)為基礎(chǔ)對(duì)服務(wù)器進(jìn)行調(diào)優(yōu)。如果并發(fā)量小,系統(tǒng)可能不會(huì)出問(wèn)題,但是并發(fā)量大時(shí),系統(tǒng)反應(yīng)速度迅速下降,由于不了解原因,因此大家還拼命在自己的應(yīng)用中尋找問(wèn)題,從而浪費(fèi)了寶貴的現(xiàn)場(chǎng)時(shí)間。但是Tomcat如何調(diào)優(yōu)呢?
??? 其實(shí)真正的WEB容器調(diào)優(yōu)是需要許多方面的知識(shí)的,你必須了解網(wǎng)絡(luò)+硬件+OS+JVM+WEB容器,但是這篇文章無(wú)法講解那么多,而應(yīng)用服務(wù)器本身也有些調(diào)優(yōu)的基本原則,下文就會(huì)給予介紹。
??? 先在Tomcat安裝目錄中找到conf子目錄,然后再打開(kāi)web.xml文件,搜索附件A中的內(nèi)容,可能會(huì)有些不同。不同的地方就是需要修改的部分。
??? 1. 屏蔽DNS查詢。
??? Web應(yīng)用程序可以通過(guò)Web容器提供的getRemoteHost()方法獲得訪問(wèn)Web應(yīng)用客戶的IP地址和名稱,但是這樣會(huì)消耗Web容器的資源,并且還需要通過(guò)IP地址和DNS服務(wù)器反查用戶的名字,因此當(dāng)系統(tǒng)上線時(shí),可以將這個(gè)屬性關(guān)閉,從而減少資源消耗,那么Web應(yīng)用也就只能記錄下IP地址了。修改的屬性是enableLoopups="false"
??? 2. 調(diào)整線程數(shù)。
??? Tomcat通過(guò)線程池來(lái)為用戶訪問(wèn)提供響應(yīng),對(duì)于上線的系統(tǒng)初步估計(jì)用戶并發(fā)數(shù)量后,然后調(diào)整線程池容量。例如:用戶并發(fā)數(shù)量大約在100左右。那么可以設(shè)置minProcessors="100" maxProcessors="100",將最大和最小設(shè)置為一樣后,線程池不會(huì)再釋放空閑的線程,使用戶訪問(wèn)突然增加的時(shí)候,不需要再消耗系統(tǒng)資源去創(chuàng)建新的線程。
??? 3. 調(diào)整最大連接數(shù)
??? 這個(gè)其實(shí)最復(fù)雜,即使用戶并發(fā)量大,但是系統(tǒng)反應(yīng)速度快的話,可以把這個(gè)值不用設(shè)置太高,高了系統(tǒng)需要消耗大量的資源去切換線程,但是如果設(shè)置太低也會(huì)造成應(yīng)用無(wú)法滿足用戶并發(fā)需要。因此設(shè)置這個(gè)最好能夠結(jié)合整個(gè)系統(tǒng)的跟蹤與調(diào)優(yōu),使系統(tǒng)達(dá)到最好的平穩(wěn)狀態(tài)。一般設(shè)置為maxProcessors的1.5倍就可以了。
??? 4. 調(diào)整網(wǎng)絡(luò)超時(shí)。
??? 主要是HTTP協(xié)議也有個(gè)連接過(guò)程,客戶端連接到服務(wù)器上后,多長(zhǎng)時(shí)間沒(méi)有得到處理就會(huì)被釋放。如果服務(wù)器處理速度較慢,但是希望每個(gè)用戶都能得到有效處理,或者網(wǎng)絡(luò)環(huán)境不好,需要保證用戶不會(huì)因?yàn)槌瑫r(shí)會(huì)斷,也可以把時(shí)間加長(zhǎng)。但是一般設(shè)置成connectionTimeout="30000"就可以了。太長(zhǎng)對(duì)系統(tǒng)來(lái)說(shuō)價(jià)值不大,反而會(huì)浪費(fèi)系統(tǒng)資源在無(wú)謂的長(zhǎng)連接上。
??? 附件A。
??? 在tomcat配置文件server.xml中的<Connector ... />配置中,和連接數(shù)相關(guān)的參數(shù)有:
??? minProcessors:最小空閑連接線程數(shù),用于提高系統(tǒng)處理性能,默認(rèn)值為10
??? maxProcessors:最大連接線程數(shù),即:并發(fā)處理的最大請(qǐng)求數(shù),默認(rèn)值為75
??? acceptCount:允許的最大連接數(shù),應(yīng)大于等于maxProcessors,默認(rèn)值為100
??? enableLookups:是否反查域名,取值為:true或false。為了提高處理能力,應(yīng)設(shè)置為false
??? connectionTimeout:網(wǎng)絡(luò)連接超時(shí),單位:毫秒。設(shè)置為0表示永不超時(shí),這樣設(shè)置有隱患的。通常可設(shè)置為20000毫秒。??? <Connector
??? className="org.apache.coyote.tomcat4.CoyoteConnector"
??? port="8080" minProcessors="5" maxProcessors="75"
??? enableLookups="true" redirectPort="8443"
??? acceptCount="10" debug="0" connectionTimeout="20000"
??? useURIValidationHack="false"
/>