提升 Ubuntu 上 Tomcat 并发能力的实用方案
一 架构与基础设施优化
二 Tomcat 线程池与连接器调优
<Executor name="tomcatThreadPool"
namePrefix="catalina-exec-"
maxThreads="800"
minSpareThreads="50"
maxSpareThreads="200"
maxIdleTime="60000"
prestartminSpareThreads="true"/>
<Connector executor="tomcatThreadPool"
port="8080"
protocol="org.apache.coyote.http11.Http11Nio2Protocol"
connectionTimeout="20000"
redirectPort="8443"
enableLookups="false"
acceptCount="1000"
maxConnections="10000"
compression="on"
compressableMimeType="text/html,text/xml,text/css,text/javascript,application/javascript"/>
注:参数需结合CPU/内存/网络/应用特性压测后微调,避免“越大越好”。三 JVM 与内存调优
JAVA_OPTS="$JAVA_OPTS -server \
-Xms4G -Xmx4G \
-XX:+UseG1GC \
-XX:MaxMetaspaceSize=512m \
-Xss512k \
-XX:+HeapDumpOnOutOfMemoryError \
-XX:HeapDumpPath=/opt/tomcat/logs/heap.hprof"
建议配合 JConsole/VisualVM/MAT 持续观察 GC、内存与线程,定位泄漏与瓶颈。四 Linux 系统层面优化
* soft nofile 65536
* hard nofile 65536
net.core.somaxconn = 4096
net.ipv4.tcp_max_syn_backlog = 4096
net.core.rmem_max = 1310720
net.core.wmem_max = 1310720
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 60
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_synack_retries = 1
# 如内核与客户端支持再启用
# net.ipv4.tcp_fastopen = 3
说明:tcp_tw_recycle 已废弃且不建议开启;在高并发短连接场景,配合应用与内核参数共同治理 TIME_WAIT。五 数据库与应用层优化与压测闭环