1
回答
nginx TIME_WAIT 1104 这样的数值正常么?
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   
[root@localhost ~]# netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
TIME_WAIT 1104
CLOSE_WAIT 1
SYN_SENT 1
FIN_WAIT1 56
FIN_WAIT2 3
ESTABLISHED 1040
SYN_RECV 4
CLOSING 7
LAST_ACK 24


我用nginx 做了反向代理,用来缓存图片用,上面的数据是 服务器现在的状态,我们公司有个家伙说 TIME_WAIT 比较高,我不明白


我们图片服务器 还绑定了cdn 

不知道数值是多少才算正常?





举报
foxidea
发帖于5年前 1回/1K+阅
共有1个答案 最后回答: 5年前

TIME_WAIT是TCP连接的一种正常状态。主动断开TCP连接的那一方在收到对方发来的FIN包并不会马上关闭TCP连接,而是在操作系统中保持这个连接并进入TIME_WAIT状态。进入这个状态之后,只会响应连接另一方的FIN请求而不会响应其他请求。这样做的目的有:

1 为了防止最后自己发出的ack丢失。 因为一旦ack丢失,TCP连接的对方会一直停留在CLOSE_WAIT状态而不释放连接除非TCP连接超时。

2 网络里可能还会存在一些无用的TCP包(之前可能因为网络不好延迟抵达的),所以会在连接关闭的时候保持一段时间TCP连接来清理这些无用的包。

在你的脚本中统计出当前处于TIME_WAIT状态的TCP连接有 1104个。每一个TCP连接都是要占用一定系统资源(主要是内存缓冲区资源)的,所以一台机器能打开的连接数都是有限的。


正常情况下TCP连接处于TIME_WAIT的时间是两倍的TCP包最长生存时间,不同系统上msl的时间定义可能不同。一般MSL为1-2分钟, TIME_WAIT是2-4分钟。可以通过修改linux内核参数的方法缩短TIME_WAIT的时间


#vi /etc/sysctl.conf


net.ipv4.tcp_tw_recycle = 1

#sysctl -p
net.ipv4.tcp_tw_recycle = 1 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。


顶部