场景回放
- A机器的服务请求B机器的服务
- 短连接请求,动态创建连接端口
- A机器服务会主动关闭连接
- 短时间内高并发请求
- A机器的tcpssports被耗尽了
- 大部分网络连接处time_wait状态
端口耗尽
- 主动调用close()/shutdown()断开连接,收到对方确认后状态变为TIME_WAIT。
- TCP协议TIME_WAIT状态会一直持续2MSL,TIME_WAIT有时间窗口,Linux默认是60秒
- TIME_WAIT状态的连接占用的资源不会被内核释放
- TIME_WAIT状态转换到CLOSE状态后资源才会真正被系统收回。
客户端内核参数优化
使用命令:vi /etc/sysctl.conf
#开启TCP连接中TIME-WAIT套接字的快速回收
net.ipv4.tcp_tw_recycle=1
#开启重用,表示是否允许将处于TIME-WAIT状态的socket(TIME-WAIT的端口)用于新的TCP连接 。
net.ipv4.tcp_tw_reuse=1
#对于本端断开的socket连接,TCP保持在FIN-WAIT-2状态的时间(秒)。
#对方可能会断开连接或一直不结束连接或不可预料的进程死亡。
net.ipv4.tcp_fin_timeout=5
#TCP时间戳(会在TCP包头增加12个字节),以一种比重发超时更精确的方法(参考RFC 1323)
#来启用对RTT 的计算,为实现更好的性能应该启用这个选项。
net.ipv4.tcp_timestamps=1
#收缩TIME_WAIT状态socket的回收时间窗口(该参数好像无效)
net.ipv4.tcp_tw_timeout=3
#tw的数目控制在15000,超过会自动清除
net.ipv4.tcp_max_tw_buckets = 15000
然后执行/sbin/sysctl -p让参数生效。
————————————————
版权声明:本文为CSDN博主「iteye_4064」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/iteye_4064/article/details/82675651