天天看点

关于close_wait的理解

1 TCP连接

关于close_wait的理解

主动关闭(active close)的一方

被动关闭(passive close)的一方

关于close_wait的理解

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包,进行彻底关闭资源,检查代码是否对打开的数据流未进行正常和异常情况下的关闭。

继续阅读