Tomcat日志出现超时时的定位与优化
一、先快速定位超时的类型与链路
二、Tomcat Connector关键参数优化
| 参数 | 作用 | 建议与说明 |
|---|---|---|
| connectionTimeout | 建立连接后等待请求数据的超时 | 通常 20000–30000;设为 0 表示永不超时,存在风险 |
| keepAliveTimeout | 长连接保持时间 | 与上游(如Nginx)保持一致或略小,常见 15000 |
| maxKeepAliveRequests | 每个长连接可处理的请求数 | 一般 100–200;高并发短连接可设为 1 降低 TIME_WAIT(权衡复用率) |
| maxThreads | 最大工作线程数 | 依据CPU/IO与业务RT评估,常见 200–500;过小会排队,过大增上下文切换 |
| minSpareThreads | 最小空闲线程 | 保证突发流量的处理能力,如 25 |
| acceptCount | 线程耗尽时的排队长度 | 如 100;队列满将拒绝新请求 |
| enableLookups | DNS反查 | 设为 false,减少阻塞与开销 |
| maxHttpHeaderSize | 请求头最大尺寸 | 如 8192(8KB),防止异常大头部攻击 |
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="30000"
keepAliveTimeout="15000"
maxKeepAliveRequests="100"
maxThreads="300"
minSpareThreads="25"
acceptCount="100"
enableLookups="false"
maxHttpHeaderSize="8192"
redirectPort="8443"
URIEncoding="UTF-8"/>
三、反向代理与上游网关的超时匹配
http {
upstream tomcat_servers {
server 192.168.0.101:8080;
server 192.168.0.102:8080;
}
server {
listen 80;
location / {
proxy_pass http://tomcat_servers;
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
send_timeout 60s;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
}
四、应用与数据库层的优化
五、JVM与系统资源的配套调优
export CATALINA_OPTS="$CATALINA_OPTS -Xms1g -Xmx2g -XX:MaxMetaspaceSize=512m -XX:+UseG1GC"