ss 配合 awk 和 sort 可高效统计 tcp 连接状态数量,比 netstat 更快更准;基础命令为 ss -tan | awk '{print $1}' | sort | uniq -c | sort -rn;支持按 state 筛选如 time-wait、close-wait;加 -p 可关联进程;ss -s 提供全局连接概览。

直接用 ss 配合 awk 和 sort 就能快速统计各 TCP 连接状态的数量,比 netstat 更快、更准,尤其适合高并发场景。
基础统计:列出所有 TCP 状态及数量
运行以下命令可汇总当前所有 TCP 连接的状态分布:
ss -tan | awk '{print $1}' | sort | uniq -c | sort -rn
说明:
- -t 限定 TCP 协议
- -a 包含所有状态(含监听、已建立、等待关闭等)
- -n 避免端口解析,提升速度
- awk '{print $1}' 提取第一列(即 State 字段)
- uniq -c 统计重复行次数,sort -rn 按数量降序排列
典型输出示例:
324 ESTAB
156 TIME-WAIT
12 LISTEN
3 CLOSE-WAIT
聚焦关键状态:单独查 TIME-WAIT 或 CLOSE-WAIT
当怀疑连接泄漏或端口耗尽时,可针对性统计:
- 查全部 TIME-WAIT 连接数:
ss -tan state time-wait | wc -l - 查全部 CLOSE-WAIT 连接数:
ss -tan state close-wait | wc -l - 同时查多个状态(如 ESTAB + TIME-WAIT):
ss -tan state established,state time-wait | wc -l
注意:state 后跟的值必须是小写,且支持的关键词包括:established、syn-sent、syn-recv、fin-wait-1、fin-wait-2、time-wait、close-wait、last-ack、listen、closing、closed。
带进程信息的统计(需 root 权限)
若需进一步确认哪些进程产生了大量某类连接,可加 -p 参数:
ss -tanp state time-wait | awk '{print $(NF-1)}' | sort | uniq -c | sort -rn
说明:
- $(NF-1) 提取倒数第二列(通常是 users:((...)) 中的进程名部分)
- 输出类似:87 java
42 nginx
- 这有助于定位是否某个服务异常创建了大量半关闭连接
补充:用 -s 快速看全局摘要
想不深入细节、只看整体连接规模,执行:
ss -s
输出包含:
- 总 TCP 套接字数
- 已建立(estab)、未建立(orphan)、TIME-WAIT、FIN-WAIT 等分类计数
- UDP、RAW、UNIX 套接字总数
- 内存占用(如 inuse、mem 字段)
适合初步判断系统网络负载是否异常升高。











