首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

浅谈CLOSE_WAIT

TCP 有很多连接状态,每一个都够聊十块钱儿的,比如我们以前讨论过 TIME_WAIT 和 FIN_WAIT1,最近时不时听人提起 CLOSE_WAIT,感觉有必要梳理一下。...通常,CLOSE_WAIT 状态在服务器停留时间很短,如果你发现大量的 CLOSE_WAIT 状态,那么就意味着被动关闭的一方没有及时发出 FIN 包,一般有如下几种可能: 程序问题:如果代码层面忘记了...此外还有一点需要说明:按照前面图例所示,当被动关闭的一方处于 CLOSE_WAIT 状态时,主动关闭的一方处于 FIN_WAIT2 状态。...那么为什么我们总听说 CLOSE_WAIT 状态过多的故障,但是却相对少听说 FIN_WAIT2 状态过多的故障呢?...坏消息是 CLOSE_WAIT 没有类似的设置,如果不重启进程,那么 CLOSE_WAIT 状态很可能会永远持续下去;好消息是如果 socket 开启了 keepalive 机制,那么可以通过相应的设置来清理无效连接

4.8K21

线上大量CLOSE_WAIT原因排查

23 # 非常异常 TIME_WAIT 1 发现绝大部份的链接处于 CLOSE_WAIT 状态,这是非常不可思议情况。...图四:大量的CLOSE_WAIT CLOSED 表示socket连接没被使用。 LISTENING 表示正在监听进入的连接。 SYN_SENT 表示正在试着建立连接。...CLOSE_WAIT 表示远程计算器关闭连接,正在等待socket连接的关闭。 FIN_WAIT_1 表示socket连接关闭,正在关闭连接。...然后开始重点思考为什么会出现大量的mysql连接是 CLOSE_WAIT 呢?为了说清楚,我们来插播一点TCP的四次挥手知识。 TCP四次挥手 我们来看看 TCP 的四次挥手是怎么样的流程: ?...参考文章: 又见CLOSE_WAIT TCP 4-times close : https://wiki.wireshark.org/TCP%204-times%20close

20.6K1611
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    服务器TIME_WAIT和CLOSE_WAIT

    time_wait和close_wait tcp连接和关闭中常见的三种状态是: ESTABLISHED 表示正在通信 TIME_WAIT 表示主动关闭 CLOSE_WAIT 表示被动关闭。...有时服务器会在网络状态上出现异常,一半来说是以下两种情况: 服务器保持了大量TIME_WAIT状态 服务器保持了大量CLOSE_WAIT状态 服务器保持了大量TIME_WAIT状态 TIME_WAIT是主动关闭连接的一方...服务器保持了大量CLOSE_WAIT状态 TIME_WAIT状态可以通过优化服务器参数得到解决,因为发生TIME_WAIT的情况是服务器自己可控的,要么就是对方连接的异常,要么就是自己没有迅速回收资源,...但是CLOSE_WAIT就不一样了,从上面的图可以看出来,如果一直保持在CLOSE_WAIT状态,那么只有一种情况,就是在对方关闭连接之后服务器程序自己没有进一步发出ack信号。...解决思路 将大量CLOSE_WAIT的解决办法总结为一句话那就是:查代码。因为问题出在服务器程序里头啊。

    1.1K20

    面试:中断:Close_Wait:进程内存:ES优化

    线上大量CLOSE_WAIT的原因 为什么会出现大量的mysql连接是 CLOSE_WAIT 呢?...根据四次挥手,我们知道四次挥手有两个状态一个是Close_wait,一个是TimeWait; TimeWait 出现在最后,客户端向服务端发送ack,表示确认,请求服务端回ack, 这是客户端会等待2MSL...(报文最大生存时间) Close_wait 出现在服务器向客户端第一次确认断开时,这是client无法向服务器发送消息,但是服务器还有消息向客户端发送; 大量的Close_wait 说明是服务器与客户端的连接没有断开...负载均衡器 在达到 60s 的时候主动触发了close操作,但是通过tcp抓包发现,服务端并没有进行回应,这是因为代码中的事务没有处理,因此从而导致大量的端口、连接资源被占用; Time_Wait 和 Close_Wait...closeWait close_wait的危害在于,在一个端口上打开的文件描述符超过一定数量,(在linux上默认是1024,可修改),新来的socket连接就无法建立了。

    1.1K30

    线上一次大量 CLOSE_WAIT 复盘

    最近,我在压测线上的一个长连接服务时,发现服务端出现大量的 CLOSE_WAIT 状态长时间不会释放,并且伴随着 goroutine 暴增,这里做个复盘,介绍下排查思路。...说起 CLOSE_WAIT,就不得不再复习一遍 TCP 的状态变迁: ?...出现 CLOSE_WAIT 本质上是因为服务端收到客户端的 FIN 后,仅仅回复了 ACK(由系统的 TCP 协议栈自动发出),并没有发 4 次断开的第二轮 FIN(由应用主动调用 Close() 或...而且观察到服务端的 CLOSE_WAIT 状态 RECV 缓冲区基本都有数据: ?...说明服务端还没有调用 recv 读取,并且在客户端关闭连接后,CLOSE_WAIT 依然不会消失,只能说明服务端 HANG 在了某处,没有调用 close。

    1.4K31

    Linux TCP客户端出现CLOSE_WAIT后进入死循环

    在前文中讲述了Linux服务端TCP的某个链路变成CLOSE_WAIT状态,然后由于客户端已经关闭了(发送了RST标志的报文),那么服务端如果继续向这个链路中写入数据的话就会收到SIGPIPE信号而终止...,这篇文章主要通过客户端进入CLOSE_WAIT后由于收到服务端产生的RST标志报文进入死循环的情况。...因为处于CLOSE_WAIT状态的一方仍然可以向对端发送报文,所以客户端在休眠5秒后再次向服务端发送了58字节的报文。...原因和《Linux TCP通信出现CLOSE_WAIT后导致服务端进程挂掉》是一样的,就是Linux内核产生软中断,发送SIGPIPE信号给客户端进程,导致其默认终止了。...7 附录: 以上就是Linux TCP通信中客户端出现CLOSE_WAIT后进入死循环的一个实例以及分析过程,下面是客户端程序linux_epoll_simple_sndmsg_netstat.c,工作流程很简单

    45710
    领券