1. 程式人生 > >Tomcat調優面試題(二)

Tomcat調優面試題(二)

Tomcat的Connector是Tomcat接收HTTP請求的關鍵模組,我們可以配置它來指定IO模式,以及處理通過這個Connector接受到的請求的處理執行緒數以及其它一些常用的HTTP策略。其主要配置引數如下: 

1.指定使用NIO模型來接受HTTP請求 

protocol="org.apache.coyote.http11.Http11NioProtocol" 指定使用NIO模型來接受HTTP請求。預設是BlockingIO,配置為protocol="HTTP/1.1" 
acceptorThreadCount="2" 使用NIO模型時接收執行緒的數目 

2.指定使用執行緒池來處理HTTP請求 

首先要配置一個執行緒池來處理請求(與Connector是平級的,多個Connector可以使用同一個執行緒池來處理請求) 
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-" 
maxThreads="1000" minSpareThreads="50" maxIdleTime="600000"/> 
<Connector port="8080"
executor="tomcatThreadPool" 指定使用的執行緒池 

3.指定BlockingIO模式下的處理執行緒數目
 

maxThreads="150"//Tomcat使用執行緒來處理接收的每個請求。這個值表示Tomcat可建立的最大的執行緒數。預設值200。可以根據機器的時期效能和記憶體大小調整,一般可以在400-500。最大可以在800左右。 
minSpareThreads="25"---Tomcat初始化時建立的執行緒數。預設值4。如果當前沒有空閒執行緒,且沒有超過maxThreads,一次性建立的空閒執行緒數量。Tomcat初始化時建立的執行緒數量也由此值設定。 
maxSpareThreads="75"--一旦建立的執行緒超過這個值,Tomcat就會關閉不再需要的socket執行緒。預設值50。一旦建立的執行緒超過此數值,Tomcat會關閉不再需要的執行緒。執行緒數可以大致上用 “同時線上人數*每秒使用者操作次數*系統平均操作時間” 來計算。 
acceptCount="100"----指定當所有可以使用的處理請求的執行緒數都被使用時,可以放到處理佇列中的請求數,超過這個數的請求將不予處理。預設值10。如果當前可用執行緒數為0,則將請求放入處理佇列中。這個值限定了請求佇列的大小,超過這個數值的請求將不予處理。 
connectionTimeout="20000" --網路連線超時,預設值20000,單位:毫秒。設定為0表示永不超時,這樣設定有隱患的。通常可設定為30000毫秒。 

4.其它常用設定
 

maxHttpHeaderSize="8192" http請求頭資訊的最大程度,超過此長度的部分不予處理。一般8K。 
URIEncoding="UTF-8" 指定Tomcat容器的URL編碼格式。 
disableUploadTimeout="true" 上傳時是否使用超時機制 
enableLookups="false"--是否反查域名,預設值為true。為了提高處理能力,應設定為false 
compression="on"   開啟壓縮功能 
compressionMinSize="10240" 啟用壓縮的輸出內容大小,預設為2KB 
noCompressionUserAgents="gozilla, traviata"   對於以下的瀏覽器,不啟用壓縮 
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain" 哪些資源型別需要壓縮 

5.小結
 

關於Tomcat的Nio和ThreadPool,本身的引入就提高了處理的複雜性,所以對於效率的提高有多少,需要實際驗證一下。 

6.配置示例 

<Connector port="8080" 
redirectPort="8443"
maxThreads="150" 
minSpareThreads="25" 
maxSpareThreads="75" 
acceptCount="100" 
connectionTimeout="20000" 
protocol="HTTP/1.1" 

maxHttpHeaderSize="8192" 
URIEncoding="UTF-8" 
disableUploadTimeout="true" 
enableLookups="false" 
compression="on" 
compressionMinSize="10240" 
noCompressionUserAgents="gozilla, traviata" 
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"> 
... 
</Connector>