nginx服务器如何减少大量的处于TIME_WAIT连接

如果应用的nginx服务器出现大量的time_warit连接,服务器的资源会被大量消耗,服务器的响应速度就会变慢,如何减少大量的处于TIME_WAIT连接?

查看服务器TCP链接的状态

通用命令

netstat -an | grep :443 | grep -v TIME_WAIT | wc -l
netstat -an | grep :443 | grep ESTABLISHED | wc -l

查看所有的状态

netstat -an|awk '/tcp/ {print $6}'|sort|uniq -c
     67 CLOSING
    727 ESTABLISHED
    173 FIN_WAIT1
    183 FIN_WAIT2
     19 LAST_ACK
      5 LISTEN
    447 SYN_RECV
      1 SYN_SENT
  27970 TIME_WAIT

动态查看某个状态

watch -n 1 "netstat -nt | grep TIME_WAIT | wc -l"

TIME_WAIT连接优化

通过以上命令如果发现大量的time_wait连接,需要优化相关的TCP连接参数。

启用套接字重用默认情况下,Linux从临时端口范围中选择一个端口,默认情况下,端口范围是32768至61000。除非已设置SO_REUSEADDR标志,否则关闭后的一段时间内,已绑定的TCP本地套接字地址不可用。使用此标志时应小心,因为它会使TCP可靠性降低。为了避免等待关闭的套接字并启用它们,请通过在文件/etc/sysctl.conf中添加以下行,来设置tcp_tw_reuse sysctl来启用TIME_WAIT套接字的重用

net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout=10

还可以适当修改tcp_fin_timeout值

每日科技资讯 | 20200721
每日科技资讯 | 20200720
Tags:,