最可靠命令是ss -tn state established | wc -l,因ss预装于现代系统、直连内核、性能优且不误匹配;netstat易缺省安装、字段浮动、解析慢且ipv6混杂。

直接看 ESTABLISHED 数量,才是你真正该关心的“当前 TCP 连接数”——它代表正在通信的活跃连接,不是监听端口,也不是已关闭残留。
怎么快速统计 ESTABLISHED 连接总数
用 ss 最准也最快,netstat 在新系统上常缺装、慢、且字段对齐不可靠:
-
ss -tn | grep ESTABLISHED | wc -l—— 通用写法,几乎所有现代发行版都预装 - 如果输出里混着 IPv6 地址(如
[::1]:12345),加grep -v '\[.*\]'过滤:ss -tn | grep ESTABLISHED | grep -v '\[.*\]' | wc -l - 别用
netstat -l,它只列LISTEN状态,不是活跃连接;netstat -an | wc -l则包含所有状态(含TIME-WAIT、CLOSED等),严重高估实际负载
按端口查 ESTABLISHED 连接(比如 80 或 3306)
服务出问题时,得知道是哪个端口扛不住了。注意 sport(源端口)和 dport(目的端口)别写反:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 查本机 80 端口上已建立的连接(即 Web 服务正处理的请求):
ss -tn state established sport :80 | wc -l - 查连到远程 3306 的客户端连接(即本机作为 MySQL 客户端发起的连接):
ss -tn state established dport :3306 | wc -l - 用
grep配合ss时,末尾加空格防误匹配:ss -tn | grep ':80 ' | grep ESTABLISHED | wc -l(注意:80后的空格)
为什么数值看起来很高?先分清状态再判断
ESTABLISHED 高才真危险;TIME-WAIT 多只是四次挥手残留,不等于压力大:
- 单独看
TIME-WAIT:ss -tn state time-wait | wc -l,持续 >6w 且伴随超时,才需排查短连接滥用或连接未复用 - 看全量状态分布(比单条 grep 更可靠):
ss -tn state all | awk '{print $1}' | sort | uniq -c | sort -nr - 重点关注:
SYN_RECV堆积 → 可能 SYN Flood 或服务响应慢;CLOSE_WAIT堆积 → 应用没调close(),资源泄漏
别被 ulimit 和 file-max 搞晕:它们不是“当前连接数”,而是上限
查当前连接用 ss;查瓶颈在哪,才需要看限制项:
-
ulimit -n是当前 shell 进程级文件描述符上限,服务继承它,改了/etc/security/limits.conf不生效很常见 -
cat /proc/sys/fs/file-max是系统总上限,但每条连接还吃内存(内核中约 3.3KB~20KB),4GB 内存撑满 100w 连接几乎不可能 -
sysctl net.netfilter.nf_conntrack_max只在开了 iptables/NAT 时才起作用,纯直连服务器改它没用
真正要盯的,永远是 ss -tn state established 输出的第一眼数字——它不会骗人,但得确保你没把 LISTEN 或 TIME-WAIT 当成活跃连接。










