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
註意:內存配置做法來自網絡資料,未驗證
Tomcat 參數配置相關