当前 established 连接数可用 netstat -tn --no-header | grep established | wc -l 或 ss -tn state established | wc -l 获取,后者更快更推荐;需按端口或ip统计时用 ss 配合 awk 等工具聚合分析。

netstat 查当前 ESTABLISHED 连接数(最常用)
多数人想看的是“现在有多少个活跃 TCP 连接”,netstat 仍是最快上手的工具,尤其在没装 ss 的旧系统上。
- 执行
netstat -tn | grep ESTABLISHED | wc -l:只统计 IPv4 的已建立连接,忽略监听、关闭中等状态 - 加
-6可查 IPv6:netstat -t6n | grep ESTABLISHED | wc -l - 注意
netstat在较新发行版(如 Ubuntu 22.04+、CentOS 8+)默认不预装,需手动sudo apt install net-tools或yum install net-tools - 输出含表头时会多算一行,用
netstat -tn --no-header | grep ESTABLISHED | wc -l更稳妥
ss 替代 netstat(推荐用于新环境)
ss 是 netstat 的现代替代,速度快、开销低,且默认随 iproute2 安装,无需额外包。
- 查 ESTABLISHED 连接:
ss -tn state established | wc -l - 想看具体进程归属(需 root):
sudo ss -tunp state established | wc -l—— 注意-p需权限,否则报错Permission denied -
ss不支持grep ESTABLISHED这种模糊匹配,必须用state established,写成state estab也行,但state est就不识别 - 性能差异明显:在连接数超万时,
ss耗时通常不到netstat的 1/5
按端口或 IP 统计连接来源(定位瓶颈)
单纯总数没意义,真正要查的是“哪个端口被打爆了”或“谁连得最多”。这时候得聚合分析。
- 看本地 80 端口的并发连接数:
ss -tn sport = :80 state established | wc -l - 统计每个远端 IP 的连接数(前 5 名):
ss -tn state established | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr | head -5 - 注意
$5是ss -tn输出的第 5 列(对端地址:端口),不同 locale 下列序可能偏移,建议先跑一次ss -tn | head -2确认格式 - 如果日志里看到大量
TIME-WAIT,别急着调内核参数——先确认是不是短连接高频服务(如 HTTP 轮询),这类场景压测时ss -tn state time-wait | wc -l才是关键指标
cat /proc/net/ 直接读取内核连接表(绕过工具开销)
当系统卡顿、ss 和 netstat 都卡住时,直接读 /proc/net 是唯一可靠方式,但需自己解析。
- IPv4 已建立连接数可粗略估算:
wc -l (减 1 是去掉表头) - 注意
/proc/net/tcp包含所有状态,真正ESTABLISHED的行,第 4 列是状态码:01表示 ESTABLISHED,0A是 LISTEN,脚本处理时得 hex 解析 - 这个文件无锁、无缓存,适合写监控脚本,但别在高 IO 场景下频繁
cat,它每次读都触发内核遍历,比ss更重 - 常见误判:看到
/proc/net/tcp行数远大于ss输出,大概率是因为包含了TIME-WAIT和CLOSE-WAIT,不是工具不准,是统计口径不同
FIN-WAIT-2 堆积或 SYN-RECV 升高,这些状态才是故障前兆。而 ss -s 输出的汇总统计,比单条命令更值得扫一眼。










