直接用 ss -ant 配合 awk 统计 TCP 状态分布:ss -ant | awk 'NR>1 {print $1}' | sort | uniq -c | sort -nr,可快速列出各状态连接数并降序排列。

直接用 ss -ant 配合 awk 统计即可,不需要 antp(该命令并不存在,可能是对 -p 选项的误写或混淆)。核心是提取状态字段,按行归类计数。
快速统计所有 TCP 状态分布
执行以下命令,一次性列出当前所有 TCP 连接的状态及其数量:
ss -ant | awk 'NR>1 {print $1}' | sort | uniq -c | sort -nr
说明:
-
ss -ant:显示所有 TCP 连接(含监听、已建立、关闭中等),-n 禁用解析,-t 限定 TCP,输出首行为表头 -
NR>1跳过表头行,$1提取每行第一个字段——即连接状态(如 ESTAB、TIME-WAIT、CLOSE-WAIT) -
sort | uniq -c去重并计数,sort -nr按数量降序排列,便于一眼识别异常状态是否堆积
聚焦终止相关状态(FIN_WAIT / TIME_WAIT / CLOSE_WAIT)
若只关心连接终止阶段的残留情况,可针对性过滤并分类统计:
ss -ant | awk 'NR>1 && $1 ~ /^(FIN-WAIT|TIME-WAIT|CLOSE-WAIT|LAST-ACK|CLOSING)$/{print $1}' | sort | uniq -c | sort -nr
常见终止状态含义:
- TIME-WAIT:主动关闭方等待 2MSL,防止旧包干扰新连接;数量多属正常,但超万需关注是否影响端口复用
-
CLOSE-WAIT:被动关闭方收到 FIN 后未调用
close();持续增长说明应用层存在连接泄漏 - FIN-WAIT-1/2:主动关闭过程中的中间态;FIN-WAIT-2 长期存在可能因对端未发 FIN 或本端未正确处理
- LAST-ACK:被动关闭方发 FIN 后等待 ACK;极少出现,若堆积说明对端网络异常或丢包
带进程信息定位问题源头
发现某状态异常偏高后,进一步查清是哪个服务在产生这些连接:
sudo ss -antp | awk 'NR>1 && $1 == "CLOSE-WAIT" {print $7}' | sort | uniq -c | sort -nr
说明:
-
-p需 root 权限才能显示完整进程信息,$7 是 users 字段(含进程名和 PID) - 该命令可快速识别哪类服务(如 java、nginx、python)产生了大量 CLOSE-WAIT 连接
- 结合
sudo ss -antp state close-wait | head -10可查看具体连接对端 IP 和端口,辅助判断是否来自特定客户端或下游服务
对比内核级汇总验证结果
运行 ss -s 获取内核维护的全局连接统计,与上层统计交叉印证:
ss -s | grep -E "(TCP|time_wait|close_wait|fin_wait)"
输出类似:
TCP: inuse 1247 orphan 0 tw 8926 alloc 1255 mem 123
其中 tw 即 TIME-WAIT 总数,inuse 是当前活跃套接字数。若 ss -ant 统计的 TIME-WAIT 数与 ss -s 中的 tw 明显不一致,需检查是否遗漏了某些状态(如 netlink 或 UDP 相关干扰)。


















