1 TCP连接
主动关闭(active close)的一方
被动关闭(passive close)的一方
2 出现的场景
close_wati 主要发生在 **被动关闭方 **,当主动关闭方因为突然中断,或者请求失败时,会发送fin包(要分手)给被动关闭方,但是被动关闭方因为代码质量原因,无法彻底关闭所需资源,即无法回送fin包给主动关闭方,因此为一直处于close_wait状态。
注:
场景1.当服务器端连接mysql时(或者读写文件流时),突然mysql中断,这时,mysql会在中断后,发送fin包给服务器端,如果服务器端没有关流操作,那就会出现close_wait
场景2.当客户端(比如浏览器)请求服务器时,如果浏览器突然挂掉了,进程死了,那么它就会给服务器端发送fin包,后续和上面一样
场景3.当客户端(比如浏览器)请求服务器时,如果服务器端迟迟不响应给客户端,那么客户端也会给服务器端发送fin包,后续和上面一样
3 出现的原因
被动关闭方没有在代码中对请求进行异常处理。
4 解决办法
4.1 治标
修改Linux系统参数
4.2 治本
排查代码,被动关闭的一方没有对主动关闭方发出的fin包,进行彻底关闭资源,检查代码是否对打开的数据流未进行正常和异常情况下的关闭。