最常用且灵活的TCP连接统计方式是netstat -an配合awk精确提取状态字段,避免grep漏匹配;可统计ESTABLISHED数、按状态分类汇总、查特定端口连接、实时监控变化。

直接用 netstat -an 配合文本处理,是最常用也最灵活的统计方式。关键在于加 -n 保证格式稳定,再用 awk 精准提取状态字段,避免 grep ESTABLISHED 的漏匹配问题。
统计所有 ESTABLISHED 连接数
这是最常查的指标,代表当前活跃通信的 TCP 连接:
-
netstat -ant | awk '$NF ~ /^[Ee][Ss][Tt][Aa][Bb][Ll][Ii][Ss][Hh][Ee][Dd]$/ {++c} END {print c+0}'—— 大小写不敏感、容忍空格、精准匹配最后一列 - 简化但有风险的写法:
netstat -ant | grep -i established | wc -l—— 在简单排查时可用,但域名解析失败或字段偏移时可能少计
按所有 TCP 状态分类统计
一次性看清连接分布,便于发现异常(比如大量 TIME_WAIT 或堆积的 SYN_RECV):
netstat -ant | awk '/^tcp/ {++S[$NF]} END {for (s in S) print s, S[s]}'- 加排序更直观:
netstat -ant | awk '/^tcp/ {++S[$NF]} END {for (s in S) print S[s], s}' | sort -nr
查看特定端口的连接数量
例如查 Web 服务(80 或 443)是否过载:
- 查 80 端口已建立连接:
netstat -ant | awk '$NF ~ /ESTABLISHED/ && $4 ~ /:80$/ {++c} END {print c+0}' - 注意:用
$4(Local Address)匹配:80$可避免误匹配 8080;若查远程端口(如客户端连你 80),则用$5(Foreign Address)
实时监控连接数变化
配合 watch 每秒刷新,观察高峰或异常波动:
watch -n 1 'netstat -ant | awk '"'"'/^tcp/ {++S[$NF]} END {print "ESTAB:", S["ESTABLISHED"]+0, "TIME_WAIT:", S["TIME_WAIT"]+0}'"'"'- 也可只盯一个状态:
watch -n 1 'netstat -ant | awk '"'"'$NF=="ESTABLISHED" {++c} END {print c}'"'"'

















