Linux Tomcat连接数优化实操指南
一 关键参数与默认值
理解 Tomcat 的连接与并发模型是优化的前提,核心参数与作用如下(默认值为常见版本的典型值,具体以所用版本为准):
| 参数 | 含义 | 默认值与说明 |
|---|---|---|
| maxThreads | 同时处理请求的线程上限 | 常见默认200;线程越多,CPU上下文切换与内存开销越大 |
| minSpareThreads / maxSpareThreads | 最小/最大空闲线程 | 常见默认25 / 75;用于平滑应对流量突增 |
| maxConnections | 容器可同时接受的连接总数 | NIO 常见默认10000;APR 常见默认8192;BIO 默认等于 maxThreads |
| acceptCount | 当所有处理线程忙时,TCP 全连接队列(backlog)长度 | 常见默认100;队列满则新连接被拒绝 |
| connectionTimeout | 连接建立与空闲超时 | 常见默认20000 ms;设为0表示永不超时,存在风险 |
| enableLookups | 是否反查客户端域名 | 建议false,减少阻塞与延迟 |
| protocol | IO 模型 | 建议 HTTP/1.1 或 NIO/NIO2;APR 需额外本地库支持 |
要点:连接建立后进入“已连接”状态,先受 maxConnections 限制;处理阶段受 maxThreads 限制;当线程耗尽,连接进入 acceptCount 队列;队列满则拒绝新连接。以上默认值与行为在不同版本/IO 模型下略有差异,调优前请结合日志与版本确认。
二 server.xml 推荐配置
<Connector port="8080"
protocol="HTTP/1.1"
maxThreads="800"
minSpareThreads="100"
maxSpareThreads="200"
acceptCount="1000"
maxConnections="10000"
connectionTimeout="30000"
enableLookups="false"
compression="on"
compressableMimeType="text/html,text/xml,text/plain,text/css,text/javascript,application/javascript,application/json"
keepAliveTimeout="15000"
maxKeepAliveRequests="100"/>
三 Linux 系统层面优化
* soft nofile 32768
* hard nofile 65536
* soft noproc 10000
* hard noproc 10000
sysctl -w net.core.somaxconn=65535
sysctl -w net.ipv4.tcp_max_syn_backlog=16384
sysctl -w net.ipv4.tcp_tw_reuse=1
sysctl -w net.ipv4.tcp_tw_recycle=0 # 在 NAT/负载均衡环境通常禁用
sysctl -w net.ipv4.ip_local_port_range="1024 65535"
sysctl -w net.ipv4.tcp_fin_timeout=30
四 JVM 与监控验证
JAVA_OPTS="$JAVA_OPTS -server -Xms4g -Xmx4g -XX:+UseG1GC"
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.port=8089
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
-Djava.rmi.server.hostname=<服务器IP>"
使用 JConsole 或 VisualVM 观察线程、内存、类加载与连接指标。