單體 Tomcat 受限於線程模型,高併發下上下文切換開銷大。最佳實踐:Web Server (Apache/Nginx) 靜態分流 + Tomcat 叢集 + 負載均衡。
// 併發連接數上限(CPU 核心數為 C)
MaxConcurrent = max(500 / AvgResponseTimeMs, 200) * C
// 網卡吞吐上限(100Mbps = 12.5MB/s)
MaxConcurrent = 12500 / AvgResponseSizeKB
超過上限需擴容:增加 CPU、升級萬兆網卡、增加 Tomcat 節點。
<Connector port="8080" protocol="HTTP/1.1"
maxThreads="200" minSpareThreads="25"
acceptCount="100" connectionTimeout="20000"
compression="on" compressableMimeType="text/html,text/xml,text/plain,text/css,text/javascript"
compressionMinSize="2048"
disableUploadTimeout="true" />
maxThreads:最大工作線程,建議 (CPU核心數 * 50) ~ 200acceptCount:隊列長度,防止突發拒絕連接compression:開啟 GZIP,減少 70%+ 傳輸量-Xms2g -Xmx2g -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m
-XX:+UseG1GC -XX:MaxGCPauseMillis=200
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/logs/heapdump.hprof
currentThreadCount、currentThreadsBusyprocessingTime、errorCount持續壓測、監控、調優,方能支撐高負載穩定運行。