admin 管理员组

文章数量: 887007

一个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。 

 

 

 

 

 

 

 

本文标签: 一个web服务端口被塞满的状态