套接字统计是什么
连接数是端口耗尽、连接排队、内存占用异常这类问题的常见线索。ss -s 直接给出当前套接字的汇总:总量、各状态分布,以及套接字缓冲区的内存占用;加上 -m 还能看到每个连接的内存细节。与内核提供的套接字统计文件互相对照,可以快速判断连接堆积在哪个状态、回收是不是跟不上,比逐个连接翻列表高效得多。
基本信息
| 适用平台 | GNU/Linux(iproute2 提供的 ss) |
|---|---|
| 语法 | ss -s 输出汇总;ss -m 显示内存细节 |
| 常用组合 | ss -tan 按状态统计、ss -lntp 看监听与进程 |
| 对照文件 | /proc/net/sockstat |
| 关键状态 | LISTEN、ESTABLISHED、TIME-WAIT、SYN-RECV |
| 统计视角 | 只在当前网络命名空间内统计 |
典型使用场景
- 判断连接是否堆积在某个状态,定位连接回收问题。
- 排查端口资源紧张:确认回收中连接的数量规模。
- 评估套接字内存占用是否是内存压力的来源。
- 对比压测前后的连接数分布,验证连接池与超时设置。
- 在容器内查看该命名空间自己的连接状况。
常用写法
常用写法
ss -s # 套接字汇总与内存占用
ss -tan | awk '{print $1}' | sort | uniq -c | sort -rn | head # 按状态统计
ss -lntp | head # 监听端口与对应进程
ss -s; cat /proc/net/sockstat # 两处数据互相印证
ss -tan state time-wait | wc -l # 统计回收中的连接数量
ss -tani | head # 连接细节,含内存与计时器状态与指标读法
| 指标或状态 | 含义 | 判断要点 |
|---|---|---|
| 总计数量 | 当前套接字数量 | 与历史基线对比才能发现问题 |
| LISTEN | 监听中 | 正常应是固定的一小批 |
| ESTABLISHED | 已建立连接 | 与并发量、连接池大小相关 |
| TIME-WAIT | 回收中 | 量大且不下降要考虑端口与内核参数 |
| SYN-RECV | 半连接 | 大量堆积可能是攻击或对端不回包 |
| 内存占用 | 套接字缓冲区 | 突然升高常伴随连接数暴涨 |
ss 显示的是当前网络命名空间的视角:容器里的数字只反映该容器,排查宿主机问题要在宿主机的命名空间里执行。
只看总数不看状态分布会误判:监听连接多和已建立连接多含义完全不同,前者通常是服务配置问题,后者是流量或连接泄漏问题。
内核的套接字统计文件与 ss 的输出可以互相印证,两者不一致时优先怀疑命名空间不同或统计口径差异,而不是直接认为某一方出错。