今天查看nginx进程 发现好多的time_wait
netstat -nat |awk '{print $6}'|sort|uniq -c|sort -rn
26363 TIME_WAIT
1117 ESTABLISHED
256 FIN_WAIT2
172 FIN_WAIT1
50 SYN_RECV
12 LAST_ACK
8 LISTEN
1 established)
1 Foreign
处理方法,修改sysctl.conf文件
那么系统TIME_WAIT的数量会变得比较多,这是由于nginx代理使用了短链接的方式和后端交互的原因,使得nginx和后端的
ESTABLISHED变得很少而TIME_WAIT很多。这不但发生在安装nginx的代理服务器上,而且也会使后端的app服务器上有大量的
TIME_WAIT。查阅TIME_WAIT资料,发现这个状态很多也没什么大问题,但可能因为它占用了系统过多的端口,导致后续的请求无法获取端口而造
成障碍,目前看来最好的办法是让每个TIME_WAIT早点过期:
在linux上的nginx负载均衡器上可以这么配置:
添加
让TIME_WAIT状态可以重用,这样即使TIME_WAIT占满了所有端口,也不会拒绝新的请求造成障碍
net.ipv4.tcp_tw_recycle = 1
#让TIME_WAIT尽快回收,我也不知是多久,观察大概是一秒钟
net.ipv4.tcp_tw_reuse = 1
或是 直接
echo "1" > /proc/sys/net/ipv4/tcp_tw_reuse
echo "1" > /proc/sys/net/ipv4/tcp_tw_recycle
在来看看
netstat -nat |awk '{print $6}'|sort|uniq -c|sort -rn
5877 TIME_WAIT
901 ESTABLISHED
307 FIN_WAIT1
13 LAST_ACK
8 LISTEN
7 SYN_RECV
3 CLOSING
1 established)
1 Foreign
明显减少了好多
阅读(5432) | 评论(0) | 转发(0) |