最可靠方案是 ss -tn state established | wc -l,因 netstat 在现代系统中默认缺失且已淘汰;ss 原生状态过滤更精准高效,支持端口筛选与实时监控,但 established 数不等于实际业务并发量。

直接用 ss -tn state established | wc -l,这是当前最可靠、无需额外安装、兼容性最好的方案。
为什么不用 netstat -na | grep ESTABLISHED | wc -l
这个命令看着直白,但实际在 CentOS 8+、Ubuntu 20.04+ 等主流系统上大概率报错:bash: netstat: command not found。因为 netstat 属于 net-tools 包,现代发行版默认不装。硬要装的话:CentOS 用 yum install net-tools,Ubuntu/Debian 用 apt install net-tools,但纯为查个连接数不值得引入一个已逐步淘汰的工具。
ss 命令里 state established 和 grep ESTABLISHED 的区别
ss 原生支持状态过滤,比管道加 grep 更精准、更高效:
-
ss -tn state established:由内核直接筛选 ESTABLISHED 状态,输出只有该状态行,无误匹配风险 -
ss -tn | grep ESTABLISHED:依赖字符串匹配,可能误中ESTABLISHED出现在注释、端口名或日志字段里的干扰项(虽少见但存在) -
ss -tn state est也合法,est是established的缩写,和ss输出中的ESTAB对应,但语义不如established清晰
统计特定端口(比如 8080)的并发连接数
只需在 state established 后加端口条件:
- 查本地监听在 8080 的 ESTABLISHED 连接:
ss -tn 'sport == :8080' state established | wc -l - 查连到远程 8080 的 ESTABLISHED 连接:
ss -tn 'dport == :8080' state established | wc -l - 注意单引号必须保留,否则 shell 会把
:或==当作特殊字符解析 - 如果提示
ss不支持sport/dport(极老内核),退回到ss -tn | awk '$5 ~ /:8080$/ && $NF ~ /^ESTAB/' | wc -l
实时监控连接数变化
用 watch 刷新即可,但要注意避免高频轮询影响性能:
- 每 2 秒刷新一次:
watch -n 2 'ss -tn state established | wc -l' - 加
-d参数可高亮变化值:watch -d -n 2 'ss -tn state established | wc -l' - 别用
-n 0.5——太频繁的 syscalls 可能拖慢网络栈,尤其在高并发场景下
真正容易被忽略的是:ESTABLISHED 连接数 ≠ 实际业务并发请求数。HTTP/1.1 长连接、gRPC keepalive、数据库连接池都会让 ESTABLISHED 数远高于瞬时请求量。要看真实负载,得结合应用层指标(如 Nginx 的 Active connections 或应用日志 QPS)一起看。











