CLOSE_WAIT

 

 CLOSE_WAIT

 

CLOSE_WAIT:当接收到Client的FIN(M),还未发送FIN(N),sever处于CLOSE_WAIT状态、

出现大量CLOSE_WAIT的场景:server未能正常发送FIN(N)。

server关闭连接通过close或者shutdown这两个系统调用来实现。

close的原理:内核检查socket上的引用计数器。如果大于1,则将这个计数器减1,然后直接返回。如果等于1,内核才会真正地关闭此socket连接(发送FIN到客户端来关闭连接)。

shutdown的原理:内核不会检查socket上的计数器,而是直接发送FIN到client关闭连接。

那么出现大量CLOSE_WAIT的场景:一个进程打开一个socket,然后fork出子进程,父进程打开的socket是会被子进程所继承,即子进程能够访问该socket。此时socket上的引用计数为 2。如果子进程调用close并退出,并不会关闭该连接,因为此时引用计数为1。如果父进程是负责监听连接的主进程,永远都不会关闭,那么close_wait就会越积越多,导致出现大量的close_wait。

CLOSE_WAIT

上一篇:Linux系统之LNMP及nginx反向代理实现


下一篇:网络图片、CSV文件请求读取转DataTable