关于close_wait的理解

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

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值