Tomcat 引數配置相關
Tomcat引數配置相關
by:授客 QQ:1033553122
目的:
對Tomcat配置的點滴學習總結,主要目的在於分析Tomcat與效能相關的一些引數設定,以便效能調優時選擇最優配置
環境:
Server version: Apache Tomcat/9.0.0.M1
Java8
配置檔案說明
1. server.xml
<?xml version='1.0' encoding='utf-8'?>
<!--connectors可使用一個共享的executor(執行器),可定義一個、多個命名的執行緒池-->
<!--
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
maxThreads="150" minSpareThreads="4"/>
-->
主要屬性說明:
name:供server.xml中其它位置引用。Name必填且唯一。
namePrefix:為每個由executor執行緒建立的執行緒的名稱字首。單個執行緒的執行緒名稱為namePrefix+threadNumber
maxThreads:執行緒池中活動執行緒的最大數量,預設200
minSpareThreads:始終開啟的最小不活躍執行緒數,預設是25。(The minimum number of threads always kept alive, default is 25)
maxIdleTime:設定超過多久關閉空閒執行緒(idle thread),預設值60000ms(1分鐘)。僅在活動執行緒數超過minSpareThreads時才會關閉空閒執行緒。
maxQueueSize:排隊等待執行的最大可執行任務數。預設值為Integer.MAX_VALUE。超過該值則拒絕新的任務
prestartminSpareThreads:是否在開啟執行器Executor時,就生成minSpareThreads個執行緒,預設false。(WhetherminSpareThreads should be started when starting the Executor or not)
threadRenewalDelay:如果配置了ThreadLocalLeakPreventionListener,將通知該執行器context已停止相關資訊。在停止context後,將線上程池重建執行緒。為了避免同一時間重建所有執行緒,該選項在設定了每兩次重建執行緒的時間間隔。單位ms,預設值1000ms。如果值為負數,不重新新建執行緒。
<!-- "Connector" 代表了請求接收端和響應返回端(A "Connector" represents an endpoint by which requests are received)。以下在埠8080,定義了一個非SSL/TLS HTTP/1.1的聯結器
-->
參考連線:http://tomcat.apache.org/tomcat-9.0-doc/config/executor.html
<!-- 配置"Connector"使用的共享執行緒池-->
<!--
<Connector executor="tomcatThreadPool"
port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
compression="on"
compressionMinSize="50"
noCompressionUserAgents="gozilla, traviata"
compressableMimeType="text/plain,application/x-javascript,text/css,
text/javascript,application/json"
/>
-->
主要屬性說明(針對HTTP/1.1):
executor:指定Executor的名稱。如果Executor存在,那麼connector(聯結器)將使用該執行器,並且所有其它的執行緒屬性都會被忽略。注意,如果沒有為聯結器指定共享執行器,那麼聯結器將使用一個內部私有的,執行器來提供執行緒池。
port:Connector用於監聽新連線請求並建立服務端socket的TCP埠。作業系統僅允許一個服務端應用在同一個指定IP上監聽指定埠。如果設定port值為0,那麼Tomcat將為該聯結器隨機查詢一個空閒埠。
protocol:設定協議。預設HTTP/1.1
connectionTimeout:設定Connector等待連線超時時間,單位毫秒。設定-1,則表示無限等待。預設值60000,即60分鐘,但是Tomcat會把標準server.xml設定為2000。除非disableUploadTimeout設定為false,否則,該超時時間也會用於讀取請求體的超時時間(如果有必要的話)
redirectPort:如果Connector支援非SSL請求,且收到一個匹配 <security-constraint>約束,要求SSL傳輸的請求,那麼,Catalina會自動把請求重定向到這個指定的埠。
注:以下欄位在預設配置中未體現
compression:Connector可能使用HTTP/1.1 GZIP壓縮,以減少伺服器頻寬。可選值:off|on|force|整數,off-禁用壓縮,on-開啟壓縮,這會導致text文字資料被要鎖, force-所有情況下都進行壓縮,整數-等同on,不同的是指定了最少壓縮資料量,即資料大小超過指定數量的資料才進行壓縮。如果content-length未知,且compression 設定為"on"或者其它非off值,將會壓縮請求輸出,即請求體。如果不指定,屬性將被設定為off。
注意: 在使用compression(節約頻寬)和使用sendfile功能(節約cpu)之間有個權衡,如果connector支援sendfile功能,比如NIO connector,那麼將優先使用sendfile,結果是超過48k的靜態檔案將不壓縮直接傳送。可通過設定connector的useSendfile 屬性值來關閉sendfile。或者在 DefaultServlet預設conf/web.xml、web應用的web.xml中修改sendfile閾值配置。
compressionMinSize:如果compression設定為on,該屬性用於指定最小起壓資料量,即超過compressionMinSize指定值才進行壓縮。 預設值 "2048"。
noCompressionUserAgents:該值為正則表示式(使用java.util.regex),匹配http客戶端user-agent頭,如果匹配則不使用compression,也就是說設定哪些客戶端發出的請求不做壓縮處理。因為一些客戶端自身已經實現了這個功能。參考網路資料,通常設定為"gozilla, traviata"。預設值為空字串(禁用正則表示式匹配)
compressableMimeType:設定使用那種HTTP壓縮,逗號分隔。預設值為text/html,text/xml,text/plain,text/css,text/javascript,application/javascript。
acceptCount:當所有可能用於處理請求的執行緒都在使用中時,進到伺服器的連線請求的最大佇列長度。當請求佇列已滿時,接受到的任意請求都被拒絕。最大請求佇列長度值預設: 100。
maxThreads:由Connector建立的用於處理請求的最大執行緒數,這決定了同時可以處理的最大請求數。預設的,該值為200.如果該connector和某個executor相關聯,那麼connector將忽略該屬性,並使用executor的執行任務,而非採用內部執行緒的。
更多資料,參考連線:http://tomcat.apache.org/tomcat-9.0-doc/config/http.html
2. web.xml
<!-- ==================== 預設的會話配置================= -->
<!-- 可以通過修改以下的值來為所有新建的會話設定預設的會話超時時間,單位 分鐘-->
<session-config>
<session-timeout>30</session-timeout>
</session-config>
3. 記憶體配置
linux修改TOMCAT_HOME/bin/catalina.sh,在前面加入
JAVA_OPTS="-Xms512m -Xmx1024m -Duser.timezone=Asia/Shanghai"
windows修改TOMCAT_HOME/bin/catalina.bat,在前面加入
set JAVA_OPTS=-Xms512m -Xmx1024m
注意:記憶體配置做法來自網路資料,未驗證