ss -s 传输层总览
ss -s 一次给出传输层的整体情况:socket 总数、TCP 各状态的数量分布,以及 socket 缓冲区的内存占用。它是排查连接类问题的优先入口——先看总量与状态分布是否异常,再决定往哪个方向下钻,而不是一上来就翻具体的连接列表。
基本信息
| 命令 | ss -s |
|---|---|
| 输出内容 | Total 行、TCP 各状态计数、mem 内存统计 |
| 内存口径 | mem 统计的是 socket 缓冲区内存,单位为页 |
| 对照工具 | ss -tan 看具体状态分布,/proc/net/sockstat 看协议汇总 |
| 权限 | 普通用户可执行 |
典型使用场景
- 服务响应变慢时快速判断是否存在连接堆积
- 检查 TIME-WAIT 数量是否异常偏高
- 排查应用未关闭连接导致的 CLOSE-WAIT 堆积
- 确认半连接数量,评估是否存在 SYN 洪泛
- 估算 socket 缓冲区内存占用是否过大
总览与下钻
总览与下钻
ss -s # 总量与状态分布总览
ss -tan | awk '{print $1}' | sort | uniq -c | sort -rn # 按状态计数下钻
ss -tan state close-wait | head -20 # 定位未关闭连接的持有者
cat /proc/net/sockstat # 协议层汇总,与 ss -s 对照状态异常对照
| 现象 | 常见原因 | 排查动作 |
|---|---|---|
| TIME-WAIT 数量高 | 短连接频繁 | 检查连接复用与内核回收参数 |
| CLOSE-WAIT 堆积 | 应用未关闭连接 | 定位持有该连接的进程 fd |
| SYN-RECV 偏高 | 半连接增多 | 查看 SYN 队列与来源分布 |
| mem 持续偏高 | socket 缓冲占用增长 | 核对连接数与缓冲区设置 |
判读顺序
- 先看 Total 行是否与业务规模匹配
- 再看各状态分布,找出明显偏离常态的那一类
- 必要时按状态过滤,定位到具体连接与进程
- 把 socket 缓冲内存与进程内存分开统计,避免混算
- 记录基线:把状态分布与内存占用的常态区间留存,便于异常时对比
mem 行统计的是 socket 缓冲区占用的内存页,和进程内存、内核 slab 是不同口径,直接相加会得出错误的整体内存画像。
总量正常但某一状态异常时,只看 Total 行会漏掉问题。状态分布往往比总量更能说明当前发生了什么。
在连接数剧烈变动的服务上,单次快照的价值有限:同一分钟内连续采样几次,才能区分持续高位与瞬时峰值。