ss -s 给出什么
ss -s 输出套接字汇总统计:总数、TCP 各状态桶计数(estab/closed/timewait/synrecv 等),以及 RAW/UDP/TCP 在 IPv4 与 IPv6 上的分布。判断连接规模是否逼近内核上限、是否需要扩容或调参时,先看这一条命令的全景,再用 ss -tan 逐条核实到具体连接。
基本信息
| 适用平台 | Linux(iproute2 自带,所有主流发行版都有) |
|---|---|
| 语法 | ss -s(可加 -4 / -6 只看某协议族) |
| 观测要点 | Total、TCP 各状态计数、Transport 分协议族统计 |
| 相关内核参数 | net.ipv4.ip_local_port_range(本机可用源端口范围)、net.core.somaxconn |
| 权限 | 普通用户即可;加 -p 看进程需 root 或同属主 |
典型使用场景
- 服务突然报连接失败:先看 TIME-WAIT 与 estab 数量是否异常膨胀
- 压测期间观察连接规模增长趋势,判断连接释放是否正常
- 评估是否需要调大 ip_local_port_range:本机作为客户端大量短连接时尤其相关
- 判断是否存在 SYN 泛洪:synrecv 计数持续非零值得警惕
- 排查「连接数高」告警:用 -s 先定性,再决定是否逐条核查
汇总输出与持续观察
汇总输出与持续观察
$ ss -s
Total: 1234
TCP: 312 (estab 156, closed 98, orphaned 0, timewait 41, synrecv 0)
Transport Total IP IPv6
RAW 0 0 0
UDP 18 12 6
TCP 312 260 52
watch -n5 'ss -s' # 每 5 秒刷新,观察增长趋势而非瞬时值
ss -tan state time-wait | wc -l # 单独统计 TIME-WAIT 数量
ss -s | grep -E 'TCP|Total' # 只取关心的两行
sysctl net.ipv4.ip_local_port_range # 本机可用源端口范围,与 timewait 量对照着看输出逐行读法
| 字段 | 含义 | 判读要点 |
|---|---|---|
| Total | 所有套接字总数 | 与历史基线对比才有意义,单次读数参考价值有限 |
| estab | 已建立连接数 | 持续贴近进程 fd 上限或 somaxconn 时需扩容 |
| timewait | TIME-WAIT 状态数量 | 短连接客户端场景偏高属正常;逼近源端口范围上限才需干预 |
| synrecv | 半开连接(握手未完成) | 持续非零可能遭遇 SYN 泛洪或对端响应异常 |
| Transport 表 | 分协议族与 IP 版本的统计 | IPv6 计数异常增长说明有服务在 IPv6 侧监听 |
timewait 数量逼近 net.ipv4.ip_local_port_range 的可用端口数量(默认约 2.8 万)时,新建对外连接会开始失败;此时先确认连接释放是否正常,再考虑调参。
排查连接数问题时把 ss -s 与进程侧对照:ss 给出全局计数,ulimit -n 与 /proc/<pid>/limits 给出单进程上限,两者一起看才判断得出是全局瓶颈还是单进程瓶颈。