线上大量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包&