本文主要是介绍一个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服务 端口被塞满的状态的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!