nload用于查看网卡整体实时吞吐量,iftop用于定位高流量连接;nload读/proc/net/dev、无权限要求,iftop基于libpcap抓包、需sudo且依赖dns配置;两者统计口径不同导致数值差异。

直接看 iftop 或 nload,别先跑 cat /proc/net/dev 手动算——前者开箱即用、实时刷新、单位明确;后者只是原始计数器,要自己差值换算,还容易单位搞错(比如把字节当比特)。
用 iftop 看连接级实时吞吐(谁在连你、流速多少)
iftop 捕获的是网卡驱动层的原始帧流量,含协议头和重传包,数值略高于应用层净荷。它适合快速回答“哪个 IP 正在猛刷我”。
- 必须加
-n:禁 DNS 解析,否则卡顿或显示unknown host(尤其内网无 DNS 时) - 加
-P显示端口号,不加就只看到192.168.1.100 → 203.208.60.1,看不出是 HTTP 还是 SSH - 加
-B强制以字节为单位(如 KB/s),避免被默认的 bit 单位误导(100 Mbps ≠ 100 MB/s) - 指定网卡很关键:Docker 容器流量走
docker0,K8s Pod 流量可能在cni0或vethxxx,只盯eth0会漏掉 - 按
l键可临时过滤,比如输入192.168.1.5只看跟这台机器的连接
用 nload 看接口级实时吞吐(整体 RX/TX 走势)
nload 不抓包,直接读 /proc/net/dev,所以无权限要求、资源占用低、响应快。它回答的是“这张网卡现在总共收/发多快”,不拆解连接。
- 默认单位是 kbit/s,看着像 Mbps 实际是千比特每秒;想看 MB/s,启动时加
-u M(注意是大写M,表示兆字节) - 多个网卡同时监控用
nload -m,但界面会变窄,小屏终端可能挤成一团 - 刷新间隔默认约 500ms,卡顿时可加
-t 1000改成 1 秒一刷(单位是毫秒) - 左右方向键切换网卡,但若某接口(如
lo)长期无流量,nload可能跳过它——不是 bug,是它自动忽略静默接口 - 累计流量数字在右下角,单位随
-u参数变化,但注意:重启后清零,不跨系统启动周期
为什么 iftop 和 nload 数值对不上
这不是工具不准,而是统计口径根本不同:iftop 统计的是链路层帧(含以太网头、IP 头、TCP 头、重传包),nload 统计的是内核网络栈交付给驱动的字节数(即 /proc/net/dev 的 rx_bytes/tx_bytes)。两者差值通常在 3%~8%,取决于包大小和重传率。
- 如果你在排查“某个进程是否真占了 50MB/s”,
nethogs更接近真实应用层吞吐,但它不显示远程 IP - 如果看到
iftop总速率远高于nload(比如 2 倍以上),大概率是抓到了广播包、ARP、ICMP 或大量小包(头占比高) -
watch -n 1 'cat /proc/net/dev'输出里,同一行的rx_bytes和tx_bytes是严格对应nload的两个通道,别拿rx_bytes和iftop的 TX 列比
真正容易被忽略的点是网卡选择——eth0 上看不到容器通信,lo 上看不到外部请求,而 docker0 或 cni0 的流量又不会自动汇总进主接口。监控前先 ip link show 确认活跃接口名,比调参数重要得多。











