场景回放
A机器的服务请求B机器的服务
短连接请求,动态创建连接端口
A机器服务会主动关闭连接
短时间内高并发请求
A机器的tcpssports被耗尽了
大部分网络连接处time_wait状态
内核配置
net.ipv4.ip_local_port_range = 1024 65000
net.ipv4.ip_local_reserved_ports = 5710-5739,15710-15739
端口耗尽
主动调用close()/shutdown()断开连接,收到对方确认后状态变为TIME_WAIT。
TCP协议TIME_WAIT状态会一直持续2MSL,TIME_WAIT有时间窗口,Linux默认是60秒
TIME_WAIT状态的连接占用的资源不会被内核释放
TIME_WAIT状态转换到CLOSE状态后资源才会真正被系统收回。
内核参数优化
客户端内核参数优化
#开启TCP连接中TIME-WAIT套接字的快速回收
net.ipv4.tcp_tw_recycle=1
#开启重用,表示是否允许将处于TIME-WAIT状态的socket(TIME-WAIT的端口)用于新的TCP连接 。
net.ipv4.tcp_tw_