首先可以通过命令查看当前TCP连接的状态:
# 查看当前TCP状态
netstat -an | awk '/^tcp/ {++y[$NF]} END {for(w in y) print w, y[w]}'
CLOSE_WAIT 2209
SYN_SENT 1
FIN_WAIT2 283
ESTABLISHED 407
LISTEN 11
发现有很多CLOSE_WAIT状态的TCP占用着资源没有释放。
关闭socket分为主动关闭(Active closure)和被动关闭(Passive closure)两种情况。前者是指有本地主机主动发起的关闭;而后者则是指本地主机检测到远程主机发起关闭之后,作出回应,从而关闭整个连接。
引起大量CLOSE_WAIT连接的情况是因为客户端被动关闭socket,而服务端没有收到关闭响应,导致服务端socket一直处于打开状态,从而导致大量CLOSE_WAIT。
解决方案:
监控客户端socket,当客户端关闭的时候,服务端也对应的关闭。
本文探讨了TCP连接中CLOSE_WAIT状态过多的原因及解决策略。通常,这源于客户端被动关闭socket,而服务端未及时响应。文章提供了检查TCP状态的命令,并建议服务端在检测到客户端关闭时也进行相应关闭,以避免资源浪费。
1232

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



