提升 Linux 上 Tomcat 并发能力的实用方案
一 架构与瓶颈识别
二 Tomcat 线程池与连接器优化
<Executor name="tomcatThreadPool"
namePrefix="catalina-exec-"
maxThreads="500"
minSpareThreads="50"
maxIdleTime="60000"
prestartminSpareThreads="true"
maxQueueSize="100"/>
<Connector port="8080"
protocol="org.apache.coyote.http11.Http11Nio2Protocol"
executor="tomcatThreadPool"
connectionTimeout="20000"
redirectPort="8443"
enableLookups="false"
compression="on"
compressionMinSize="2048"
compressableMimeType="text/html,text/xml,text/plain,text/css,text/javascript,application/javascript"
URIEncoding="UTF-8"/>
三 JVM 与垃圾回收调优
export JAVA_OPTS="\
-Xms2g -Xmx2g \
-XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m \
-XX:+UseG1GC \
-XX:MaxGCPauseMillis=200 \
-XX:+PrintGC -XX:+PrintGCDetails -Xloggc:/opt/tomcat/logs/gc.log"
四 Linux 系统层优化
* soft nofile 65536
* hard nofile 65536
net.core.somaxconn = 4096
net.ipv4.tcp_tw_reuse = 1
# 仅在明确收益且网络拓扑简单时考虑(NAT/跨机房慎用)
# net.ipv4.tcp_tw_recycle = 1
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
五 数据库与缓存及监控落地
<Resource name="jdbc/mydb" auth="Container" type="javax.sql.DataSource"
maxTotal="100" maxIdle="30" maxWaitMillis="10000"/>