问题记录-- linux服务器过多TIME_WAIT连接排查
现象:
服务器有的子系统出现新的连接无法建立,导致服务异常。
后台查看netstat 状态,连接数达到上万。
使用统计命令:
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
TIME_WAIT 15586
CLOSE_WAIT 343
ESTABLISHED 581
发现异常, TIME_WAIT 连接达到上万。
观察发现,连接的 都是我们文件存储服务oss 50000端口。
[[email protected] ~]# netstat -anp |grep TIME_WAIT | head
tcp 0 0 127.0.0.1:37545 127.0.0.1:50000 TIME_WAIT -
tcp 0 0 127.0.0.1:40285 127.0.0.1:50000 TIME_WAIT -
tcp 0 0 127.0.0.1:57127 127.0.0.1:50000 TIME_WAIT -
tcp 0 0 127.0.0.1:34796 127.0.0.1:50000 TIME_WAIT -
tcp 0 0 127.0.0.1:34424 127.0.0.1:50000 TIME_WAIT -
tcp 0 0 127.0.0.1:53067 127.0.0.1:50000 TIME_WAIT -
tcp 0 0 127.0.0.1:39736 127.0.0.1:50000 TIME_WAIT -
tcp 0 0 127.0.0.1:39659 127.0.0.1:50000 TIME_WAIT -
tcp 0 0 127.0.0.1:48616 127.0.0.1:9080 TIME_WAIT -
tcp 0 0 127.0.0.1:48197 127.0.0.1:50000 TIME_WAIT -
抓包通过过滤命令 tcp.stream eq xx 发现除了部分业务连接外。每秒有几十次握手连接 50000端口的请求,然后没传数据立刻挥手。 所以netstat 也查不到 建立连接的状态 和 当时的进程号。
解决方式:
没有优雅的查错方法。找了使用存储服务的几个服务,逐个停止进程。发现停止了a服务,连接数降到了1000左右,恢复正常。然后排查a服务,发现a服务 新修改的代码, 一直做连接 探测存储服务是否可连,没有控制频率。修改,间隔1s做心跳检测,恢复正常。
上一篇: 前端实习生面试题分析(一)