Tomcat在Debian上的性能調優技巧
Http11NioProtocol
)或NIO2(Http11Nio2Protocol
)連接器,它們比傳統的BIO(阻塞I/O)更適合高并發場景,能顯著提升請求處理吞吐量。例如:<Connector port="8080" protocol="org.apache.coyote.http11.Http11Nio2Protocol" connectionTimeout="20000" redirectPort="8443"/>
<Connector port="8443" protocol="org.apache.coyote.http2.Http2Protocol" maxThreads="150" SSLEnabled="true">
<SSLHostConfig>
<Certificate certificateKeyFile="conf/localhost-rsa-key.pem" certificateFile="conf/localhost-rsa-cert.pem" type="RSA"/>
</SSLHostConfig>
</Connector>
maxConnections
(最大連接數,默認10000,可根據服務器資源調整)、connectionTimeout
(連接超時時間,默認20秒,避免長時間占用資源)、enableLookups="false"
(禁用DNS查詢,減少網絡開銷)。例如:<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" maxConnections="10000" enableLookups="false" redirectPort="8443"/>
Executor
元素定義線程池,避免多個Connector共享默認線程池的資源競爭。示例如下:<Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="500" minSpareThreads="50" maxQueueSize="100" maxIdleTime="60000"/>
<Connector executor="tomcatThreadPool" port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443"/>
maxThreads
:最大線程數(建議為CPU核心數的2-4倍,如4核CPU設置為800-1600);minSpareThreads
:最小空閑線程數(保持一定數量的線程,避免頻繁創建/銷毀);maxQueueSize
:等待隊列大?。犃袧M后拒絕請求,防止內存溢出);maxIdleTime
:線程空閑時間(超過則銷毀,釋放資源)。-Xms
(初始堆)和-Xmx
(最大堆),建議兩者相等以避免頻繁GC。例如:export CATALINA_OPTS="-Xms2g -Xmx4g"
-XX:+UseG1GC
),它能在保證低延遲的同時提高吞吐量;若應用對延遲敏感,可添加-XX:MaxGCPauseMillis=200
(設置最大GC停頓時間)。例如:export CATALINA_OPTS="$CATALINA_OPTS -XX:+UseG1GC -XX:MaxGCPauseMillis=200"
-XX:MetaspaceSize
(初始元空間)和-XX:MaxMetaspaceSize
(最大元空間),避免元空間溢出(常見于大量使用第三方庫的應用)。例如:export CATALINA_OPTS="$CATALINA_OPTS -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=1g"
compression="on"
開啟gzip壓縮,設置compressionMinSize
(觸發壓縮的最小響應大小,如1KB)和compressableMimeType
(需要壓縮的MIME類型,如文本、JSON)。示例如下:<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" compression="on" compressionMinSize="1024" compressableMimeType="text/html,text/xml,text/css,text/javascript,application/json" redirectPort="8443"/>
server.xml
中注釋或刪除AJP連接器,減少資源占用:<!-- <Connector port="8009" protocol="AJP/1.3" redirectPort="8443"/> -->
/etc/security/limits.conf
,添加以下內容:* soft nofile 65535
* hard nofile 65535
重啟系統或重新登錄生效。/etc/sysctl.conf
,調整以下參數以提升網絡性能:net.core.somaxconn = 1024 # 增加監聽端口的最大連接隊列長度
net.ipv4.tcp_max_syn_backlog = 8192 # 增加SYN隊列長度
net.ipv4.tcp_tw_reuse = 1 # 允許復用TIME_WAIT狀態的連接
執行sysctl -p
使配置生效。catalina.sh
中啟用-Dcom.sun.management.jmxremote
)、VisualVM、Prometheus+Grafana等工具監控Tomcat的線程池使用率、內存消耗、GC頻率等指標,根據監控結果動態調整參數(如增加maxThreads
或優化GC策略)。以上技巧需根據Debian服務器的硬件配置(CPU、內存)、應用類型(高并發/低延遲、靜態/動態內容)及實際負載情況進行調整,建議在測試環境驗證后再應用于生產環境。