Linux上Tomcat性能调优实战
一 基线评估与监控
二 操作系统与网络优化
ulimit -n 65536,并在 systemd 服务中设置 LimitNOFILE=65536 持久化。net.core.somaxconn=4096、net.ipv4.tcp_max_syn_backlog=4096、net.ipv4.tcp_fin_timeout=30、net.ipv4.tcp_tw_reuse=1、net.ipv4.tcp_tw_recycle=0(注意:回收策略在部分内核版本存在争议,生产以实测为准)、net.core.rmem_max=1310720、net.core.wmem_max=1310720、net.ipv4.tcp_synack_retries=1、net.ipv4.tcp_syn_retries=1、net.ipv4.tcp_fastopen=3。修改后执行 sysctl -p 生效。三 JVM 调优
-Xms 与 -Xmx 设为相同,一般控制在可用物理内存的 70%–80%;JDK 8 使用Metaspace替代 PermGen,无需再设置 -XX:PermSize/-XX:MaxPermSize。-XX:+UseParallelGC -XX:+UseParallelOldGC-XX:+UseG1GC -XX:MaxGCPauseMillis=100 -XX:G1HeapRegionSize=16mbin/catalina.sh 的 JAVA_OPTS 或 CATALINA_OPTS):
JAVA_OPTS="-server -Xms4g -Xmx4g -XX:+UseG1GC -XX:MaxGCPauseMillis=100 -XX:G1HeapRegionSize=16m -XX:+PrintGC -XX:+PrintGCDetails -Xloggc:/opt/tomcat/logs/gc.log -Dfile.encoding=UTF-8"JAVA_OPTS="-server -Xms4g -Xmx4g -XX:+UseParallelGC -XX:+UseParallelOldGC -XX:ParallelGCThreads=8 -XX:+PrintGC -XX:+PrintGCDetails -Xloggc:/opt/tomcat/logs/gc.log -Dfile.encoding=UTF-8"四 Tomcat 配置优化
protocol="org.apache.coyote.http11.Http11NioProtocol";若已安装 APR/native,可评估 APR 提升本地性能:protocol="org.apache.coyote.http11.Http11AprProtocol"。<Executor name="tomcatThreadPool"
namePrefix="catalina-exec-"
maxThreads="500"
minSpareThreads="50"
maxIdleTime="60000"
maxQueueSize="1000"/>
<Connector executor="tomcatThreadPool"
port="8080"
protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="20000"
redirectPort="8443"
keepAliveTimeout="15000"
maxKeepAliveRequests="100"
enableLookups="false"
compression="on"
compressableMimeType="text/html,text/xml,text/plain,text/css,text/javascript,application/json,application/xml,application/javascript"/>
<Connector port="8080"
protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="500"
minSpareThreads="50"
acceptCount="100"
connectionTimeout="20000"
redirectPort="8443"
enableLookups="false"
compression="on"
compressableMimeType="text/html,text/xml,text/plain,text/css,text/javascript,application/json,application/xml,application/javascript"/>
maxThreads:CPU 密集型约 CPU 核数×1–2;I/O 密集型约 CPU 核数×2–4(以压测校准)。acceptCount:连接队列长度,默认 100,高并发可适当增大,避免瞬间拒绝。connectionTimeout:建议 20000 ms;keepAliveTimeout 与 maxKeepAliveRequests 结合长连接调优。enableLookups="false":关闭 DNS 反查,降低时延。compression="on":开启 GZIP,压缩文本类资源(JS/CSS/HTML/JSON)。五 数据库与应用层优化及压测闭环
maxActive/maxIdle/maxWait,并优化慢查询、索引与批量操作;确保连接泄漏检测与回收。