出现大量TIMEWAIT连接的排查与解决
Last-Modified: 2019年7月10日21:58:43 项目生产环境出现大量TIME_WAIT(数千个), 需要一一排查 先上总结: nginx 未开启 keep-alive 导致大量主动断开的tcp连接nginx 与 fastcgi(php-fpm) 的连接默认是短连接, 此时必然出现 TIME_WAIT状态确认统计TIME_WAIT 连接的本地地址 netstat -an | grep TIME_WAIT | awk '{print $4}' | sort | uniq -c | sort -n -k1# ... 前面很少的略过# 2 127.0.0.1:56420# 442 192.168.1.213:8080# 453 127.0.0.1:9000分析: 8080端口是nginx对外端口9000端口是php-fpm的端口8080 对外web端口经过确认, nginx 的配置文件中存在一行 # 不启用 keep-alivekeepalive_timeout 0;尝试抓取 tcp 包 tcpdump tcp -i any -nn port 8080 | grep "我的ip"# 其中某一次连接的输出如下# 20:52:54.647907 IP 客户端.6470 > 服务端.8080: Flags [S], seq 2369523978, win 64240, options [mss 1460,nop,wscale 8,nop,nop,sackOK], length 0# 20:52:54.647912 IP 服务端.8080 > 客户端.6470: Flags [S.], seq 1109598671, ack 2369523979, win 14600, options [mss 1460,nop,nop,sackOK,nop,wscale 7], length 0# 20:52:54.670302 IP 客户端.6470 > 服务端.8080: Flags [.], ack 1, win 256, length 0# 20:52:54.680784 IP 客户端.6470 > 服务端.8080: Flags [P.], seq 1:301, ack 1, win 256, length 300# 20:52:54.680789 IP 服务端.8080 > 客户端.6470: Flags [.], ack 301, win 123, length 0# 20:52:54.702935 IP 服务端.8080 > 客户端.6470: Flags [P.], seq 1:544, ack 301, win 123, length 543# 20:52:54.702941 IP 服务端.8080 > 客户端.6470: Flags [F.], seq 544, ack 301, win 123, length 0# 20:52:54.726494 IP 客户端.6470 > 服务端.8080: Flags [.], ack 545, win 254, length 0# 20:52:54.726499 IP 客户端.6470 > 服务端.8080: Flags [F.], seq 301, ack 545, win 254, length 0# 20:52:54.726501 IP 服务端.8080 > 客户端.6470: Flags [.], ack 302, win 123, length 0上述具体的ip已经被我批量替换了, 不方便暴露服务器ip分析: ...