Categories: 业界

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值

5.0
01
每日科技资讯 | 20200721
每日科技资讯 | 20200720
嘻嘻

嘻嘻IT: 笔者是一个工作七八年的程序猿老鸟,从事涉及的技术栈主要包括PHP、Linux、Devops等,喜欢研究新技术,尝试新技术,提升技术自动化和开发效率,致力于write less,do more! 技术每年都会层出不穷,领域划分的越来越细,不可能学习所有的东西,保持对技术的好奇心,理解技术中核心思想,做一个有深度,有思想的开发!

Recent Posts

如何在Linux中根据修改日期和时间查找和排序文件

习惯于使用图形用户界面的人可以…

8小时 ago

Golang中如何实现PHP中array_fill函数?

PHP中的array_fill…

9小时 ago

Dify是一个开源的LLM应用程序开发平台(25.8k stars)

Dify是一个开源的LLM应用…

12小时 ago

MyIP一款开源好用IP工具箱(4.6k stars)

MyIP一款开源好用IP工具箱…

1天 ago

asciinema一款优秀终端会话录制工具(13.2k stars)

asciinema是一个优秀的…

2天 ago