一个web服务 端口被塞满的状态

背景:算法起了多个端口,对外提供服务,改了代码后发现,端口telnet不通,查看端口情况:

Recv队列,被挤满了,没办法再访问该端口了。

并且一看端口的情况,一大堆CLOSE_WAIT。

 

上网排查问题:

对以上两个现象的解释为:

1、Recv_Q / Send_Q

2、CLOSE_WAIT 解析

近测试环境server由于需要与大量的后台server交互,今天突然发现有大量的close_wait产生,于是仔细研究了一下: 
如果我们的服务器程序处于CLOSE_WAIT状态的话,说明套接字是被动关闭的! 
因为如果是CLIENT端主动断掉当前连接的话,那么双方关闭这个TCP连接共需要四个packet: 

1.Client -> FIN  -> Server   
2.Client <- ACK  <- Server   这时候Client端处于FIN_WAIT_2状态;而Server 程序处于CLOSE_WAIT状态。   
3.Client <- FIN  <- Server   这时Server 发送FIN给Client,Server 就置为LAST_ACK状态。   
4.Client -> ACK  -> Server   Client回应了ACK,那么Server 的套接字才会真正置为CLOSED状态。    


Server 程序处于CLOSE_WAIT状态,而不是LAST_ACK状态,说明还没有发FIN给Client,那么可能是在关闭连接之前还有许多数据要发送或者其他事要做, 
导致没有发这个FIN packet。 

 

 

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值