ESTABLISHED 的含义
ESTABLISHED 表示三次握手完成、连接可以双向收发数据的稳定状态。它是排障时最常被统计的状态:连接数暴涨、连接泄漏、fd 耗尽、长连接分布异常,几乎都要先看这一态的规模与归属进程。但「数量大」本身不是问题,关键看它是否与业务预期匹配,以及是否有对应的回收机制。
基本信息
| 适用平台 | Linux(ss、netstat)、Windows(netstat -ano、Get-NetTCPConnection) |
|---|---|
| 查看命令 | ss -tan state established、ss -tanp 可显示进程 |
| 相关限制 | 单进程 fd 上限(ulimit -n 与 /proc/PID/limits)直接决定连接天花板 |
| 平台差异 | 容器内看到的连接受命名空间限制,宿主机视角可能不同 |
统计与归属
统计与归属
ss -tan state established | wc -l # 总连接数
ss -tanp state established | awk '{print $5}' | sort | uniq -c | sort -rn | head # 按对端聚合
ss -tnp dport = :443 | head # 只看 443 的出向连接
ss -s # 概览:各状态数量汇总TCP 状态速览
| 状态 | 含义 | 常见原因 |
|---|---|---|
| LISTEN | 服务端等待连接 | 常驻监听,数量应稳定 |
| SYN-RECV | 半连接待完成握手 | 突增多为扫描或 SYN 洪水 |
| ESTABLISHED | 连接已建立可收发 | 业务连接,量大需看是否匹配预期 |
| CLOSE-WAIT | 对端已关闭本端未关 | 应用未关闭连接,堆积则是代码缺陷 |
| TIME-WAIT | 主动关闭后等待回收 | 短连接高并发下正常且量大 |
典型使用场景
- 排查「连接数打满」:确认是业务增长、连接泄漏还是外部扫描
- 定位连接归属进程,判断是哪个服务在大量建连
- 配合 ss -s 与内核计数观察状态占比,找异常聚集的状态
- 容量评估:按连接数推算 fd 限额、内存与 epoll 规模
ESTABLISHED 数量要和进程 fd 限额一起看:ulimit -n 与 /proc/PID/limits 是实际上限。万级长连接属正常,单进程几万连接需要预留 epoll 结构与连接级内存。
大量 CLOSE-WAIT 比大量 ESTABLISHED 更值得怀疑:它说明对端已经关闭而本端应用没有调用关闭,通常是连接池或异常分支没有释放资源。