Tomcat日志出现连接超时的定位与解决
一 快速判断超时类型
二 配置层面修复
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
maxThreads="200"
minSpareThreads="25"
acceptCount="100"
maxKeepAliveRequests="100"
keepAliveTimeout="15000"
disableUploadTimeout="true"
redirectPort="8443" />
server:
tomcat:
accept-count: 100
threads:
max: 800
min-spare: 100
connection-timeout: 5000
max-connections: 8192
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;
}
三 代码与架构优化
@WebServlet(asyncSupported = true, urlPatterns = {"/async"})
public class AsyncServlet extends HttpServlet {
protected void doGet(HttpServletRequest req, HttpServletResponse resp) {
AsyncContext ctx = req.startAsync();
ctx.start(() -> {
try {
// 耗时处理
resp.getWriter().write("done");
ctx.complete();
} catch (IOException e) { ctx.complete(); }
});
}
}
四 系统与网络排查
* soft nofile 65536
* hard nofile 65536
net.core.somaxconn = 65535
net.core.netdev_max_backlog = 65535
net.ipv4.tcp_max_syn_backlog = 4096
net.ipv4.ip_local_port_range = 1024 65535
sysctl -p
五 监控与验证