首页 > Sysadmin > 正文

Linux 服务器查看网络连接数的常用方法

huyuanwen 2026-11-03 Sysadmin

用 ss、netstat、/proc/net 和 lsof 四种方式查看 Linux 网络连接数,附状态统计与排查步骤。

TL;DR

  • 推荐 ss(iproute2 自带,无需安装):ss -s 看总览,ss -tan 列表,ss -tan state established 筛状态[1]。
  • netstat 来自 net-tools,Ubuntu 24.04 默认不装,且官方 manpage 已标记 obsolete,仅作兼容参考[2]。
  • 不装任何包也能看:读 /proc/net/sockstat 和 /proc/net/tcp[3]。
  • 按进程定位用 lsof -i -nP;查 conntrack 表用 conntrack -C(需安装 conntrack)[4][5]。

ss:现代首选

ss 是 iproute2 套件的套接字统计工具,直接读内核 netlink,比 netstat 更快[1]。

ss -s
ss -tan state established
ss -tan state listening
ss -tanH | awk '{print $1}' | sort | uniq -c

ss -s 给出 TCP/UDP/RAW/FRAG 的汇总与 TCP 状态计数;-t TCP、-a 全部(含监听)、-n 不解析服务名;-H 去掉表头便于脚本化;state 过滤器按连接状态筛选[1]。

netstat:兼容旧脚本

netstat 来自 net-tools,Ubuntu 24.04 默认未安装;manpage 明确提示 “This program is mostly obsolete. Replacement for netstat is ss”[2]。

sudo apt-get install -y net-tools
netstat -tan
netstat -s | grep -i tcp

-t TCP、-a 全部、-n 数字形式[2]。仅在维护老脚本或老系统时使用;新环境优先 ss。

不装包:直接读 /proc

内核把连接统计暴露在 /proc,任何有 shell 的环境都能读[3]。

cat /proc/net/sockstat
wc -l /proc/net/tcp /proc/net/tcp6

/proc/net/sockstat 输出包含 TCP: inuse 3 orphan 0 tw 6 alloc 3 mem 0,其中 inuse 是已分配的 TCP 套接字数,tw 是 TIME-WAIT 数量[3]。/proc/net/tcp 每行一条 IPv4 TCP 连接(含表头),数量减 1 即连接数;IPv6 走 tcp6[3]。

注意:WSL2 等容器化环境里 /proc/net 是 network namespace 视图,只反映当前命名空间[3]。

lsof:按进程定位

lsof -i -nP | head

-i 选网络文件,-n 不解析主机名,-P 不解析端口名[4]。适合找”是谁占了这个连接”。

conntrack:NAT/防火墙连接跟踪表

启用 conntrack 的防火墙/NAT 网关上,连接跟踪表大小反映真实并发[5]。

sudo apt-get install -y conntrack
conntrack -C

-C 输出当前跟踪表中的连接数[5]。空闲主机上可能为 0。

回滚

  • 安装的 net-tools/conntrack 用完卸载:apt-get purge -y net-tools conntrack && apt-get autoremove --purge -y
  • 无持久系统改动;/proc 只读。

排错速查

现象 原因 处理
ss: command not found iproute2 未装(极少见) apt-get install iproute2
netstat: command not found net-tools 未装(Ubuntu 24.04 默认) 改用 ss,或装 net-tools
连接数看起来偏少 只看了 IPv4 加看 /proc/net/tcp6 或 ss -6
conntrack -C 报错 conntrack 模块未加载/无权限 用 root 执行,或检查内核模块
数字与监控平台不一致 采样时刻/命名空间不同 统一用 ss -s 并固定采样间隔

实测与局限性

  • 实测环境:WSL2 Ubuntu 24.04.4 LTS,iproute2 6.1.0。
  • 已验证:ss -s / ss -tan / ss -tan state listening 输出;/proc/net/sockstat、/proc/net/tcp 行数;lsof -i;安装并运行 netstat 与 conntrack 后卸载还原。
  • 局限性:WSL2 为单命名空间,无真实高并发流量;conntrack 表在空闲 VM 上为 0,未验证高负载场景;未测 network namespace 切换(ip netns exec)。

参考资料

文中主要命令已在 WSL Ubuntu(24.04)实测并核对其在 Debian 系与通用发行版的文档口径。