线上大量CLOSE_WAIT的原因深入分析
浅谈CLOSE_WAIT
1 工具
- 查看TCP各个状态的连接数量
netstat -na | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
LISTEN 5
TIME_WAIT 3
ESTABLISHED 5
- perf火焰图
如果对业务代码不熟悉,可以直接使用perf把所有的调用关系使用火焰图给绘制出来。

2 TCP各个阶段的状态
- CLOSED 表示socket连接没被使用。
- LISTENING 表示正在监听进入的连接。
- SYN_SENT 表示客户端发送SYN包,还未收到服务端的响应。
- SYN_RECEIVED 表示服务端收到了客户端的SYN包,并发送SYN+ACK,还未收到客户端的ACK报文。
- ESTABLISHED 表示连接已被建立。
- 客户端表示已经收到了服务端的SYN+ACK报文,并发送了ACK报文。
- 服务端表示收到了客户端的ACK报文。
- CLOSE_WAIT 表示服务端收到了客户端的FIN包,并返回了ACK报文,但是自己还未发送FIN包。
- FIN_

本文深入探讨TCP连接的各个状态,包括CLOSED、LISTENING、CLOSE_WAIT等,解析服务端关闭连接的异常场景,特别是关注listen函数backlog的含义。当TCP全连接队列满时,服务端如何处理新连接请求,并通过实例分析Ubuntu和Centos7的不同表现。
最低0.47元/天 解锁文章
645

被折叠的 条评论
为什么被折叠?



