问题场景
某日线上登录出现故障,排查日志发现HttpClient请求时随机分配到的端口被占用,导致第三方登录拉取信息时无法拉取成功,错误如下:
java.net.BindException: Address...,也就是一开始图上另一个项目发请求出现的Address already in use (Bind failed)错误....close释放连接,因此出现了这个问题....对于四次挥手过程中,当主动方接收到被动放的关闭确认信号FIN后,主动方会回复一个ACK信号,然后会进入TIME_WAIT状态,此时会等待2MLS,在Linux中也就是60s,因此相对上述2000多个活跃...主动方已关闭,然后利用此端口建立了新的连接.也就是旧的TCP关闭,新的TCP已建立,那么就会造成信道的不可靠.
因此超时等待机制是必要的,
参考
浅谈CLOSE_WAIT