1. Tomcat中線程池的配置
Tomcat中配置線程池時,需打開Tomcat的配置文件(conf/server.xml
),然後加入以下配置:
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
maxThreads="150" minSpareThreads="4"/>
<Connector executor="tomcatThreadPool"
port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
Executor可配置的參數有以下幾種:
- className:線程池的實現類,如果自定義需要實現org.apache.catalina.Executor接口。默認是org.apache.catalina.core.StandardThreadExecutor
- name:線程池的名字(server.xml可以定義多個線程池)
- threadPriority:線程的優先級,默認是5
- daemon:是否是守護線程,默認是true
- namePrefix:線程的名字前綴,線程的名字由namePrefix + threadNumber 組成
- maxThreads:線程池最大的線程數量。類似Java線程池中的maximumPoolSize
- minSpareThreads:線程池中永遠活動的線程的數量,類似Java線程池中的corePoolSize
- maxIdleTime:minSpareThreads到maxThreads之間的線程的最長存活時間,默認60s(60000ms)
maxQueueSize:線程隊列的最大值,超過這個隊列再進來的線程就會直接拋棄處理,默認是Integer.MAX_VALUE
Connector 可配置的參數如下:
- allowTrace:是否運行跟蹤HTTP的方法,默認是false;
- connectionTimeout:網絡連接超時,單位是ms。設置爲0表示永不超時,但這樣設置是有隱患的;
- keepAliveTimeout:長連接最大保持時間(ms)
- maxHttpHeaderSize:HTTP請求頭信息的最大長度,超過此長度的部分不予處理。一般8KB.
- URIEncoding:指定Tomcat容器的URL編碼格式
- acceptCount:指定當所有可以使用的處理請求的線程數都被使用時,可以放到處理隊列中的請求數,超過這個數的請求將不予處理,默認是10個
- disableUploadTimeout:上傳時是否使用超時機制
- port:端口
- protocol:協議,有以下三種:
- org.apache.coyote.http11.Http11Protocol和HTTP/1.1相同(默認值)
- org.apache.coyote.http11.Http11NioProtocol(使用NIO)
- org.apache.coyote.http11.Http11AprProtocol()
- enableLookups:是否反查域名,取值爲true或false。爲了提高處理能力,應該設置爲false
- bufferSize:默認是 2048 bytes
- maxSpareThreads:最大的空閒連接數,一旦創建的線程超過這個值,Tomcat就會關閉不再需要的socket線程。默認是50;
- maxThreads:最多同時處理的連接數,Tomcat使用線程來處理接收的每個請求。這個值表示Tomcat可創建的最大的線程數。默認200.
- minSpareThreads:最小空閒線程數,Tomcat初始化時創建的線程數。默認是4
2. Tomcat的線程池Executor實現原理
後期補。。。