nload 看不到容器或虚拟网卡流量,因其仅读取 /proc/net/dev 中的物理网卡统计,无法感知命名空间隔离的 veth/calitap 等接口,且不支持指定 netns 切换视角。

为什么 nload 看不到容器或虚拟网卡流量
nload 默认只监控物理网卡(如 eth0、enp0s3),它通过读取 /proc/net/dev 统计,但对命名空间隔离的接口(Docker 的 veth*、Kubernetes 的 cali*、QEMU 的 tap*)完全不可见。它也不支持指定 netns,没法切到容器内部视角。
- 如果你在宿主机跑
nload却想看某个容器的出向流量,基本是徒劳——它连那个设备名都列不出来 - 它不解析包内容,也不区分协议或端口,纯看字节数速率,所以无法回答“谁在传大文件”或“哪个进程在打满带宽”
- 刷新间隔固定为 100ms,不能调;最小单位是 KB/s,小流量下容易显示为 0 或跳变剧烈
iftop 显示的“TX/RX”和实际吞吐经常对不上
iftop 基于 libpcap 抓包统计,它看到的是 IP 层载荷,不含以太网帧头、TCP/UDP 头、重传包、ICMP 控制报文。而 /proc/net/dev 或 ethtool -S 计的是链路层字节数,两者天然有 20–60 字节/包的偏差。
- 默认只解析前 128 字节,遇到分片包或带选项的 TCP 包可能误判端口或协议
- 不加
-P时,它把所有同端口通信归为一行(比如多个客户端连同一:80服务端,全挤在一条里),看起来像单个连接占满带宽 - 若系统开了 TSO/GSO(常见于千兆以上网卡),
iftop抓到的是软件合成的大包,数值会虚高;关掉需执行ethtool -K eth0 tso off gso off
iptraf-ng 启动就报 “Cannot open /dev/tty” 或直接退出
iptraf-ng 是 ncurses 程序,强依赖交互式终端。在无 tty 环境(systemd service、cron、SSH 非登录 shell、容器内未挂载 /dev/tty)必然失败。它不像 nload 或 iftop 支持纯文本输出模式。
- 远程用 SSH 连入后直接运行失败?先确认是否用了
ssh user@host command这种非登录模式——换成ssh -t user@host iptraf-ng强制分配伪终端 - 想后台采集?不行。
iptraf-ng没有--log或--output参数,日志只能靠script命令套壳,但会混入控制字符,难解析 - 界面里按
h查帮助,但帮助页本身也依赖完整终端尺寸;窗口太窄或$COLUMNS设错会导致崩溃
真要定位“哪个进程在吃带宽”,这三个工具都不行
它们全在内核网络栈的“设备驱动层”或“IP 层”采样,根本看不到 socket 归属。Linux 没有用户态工具能绕过 /proc/[pid]/fd/ 和 ss -tunp 做实时进程级流控——除非你用 eBPF(如 tcplife、tcpsubnet)或 netstat -tunp 快照轮询。
-
iftop -P只能显示端口,不代表该端口当前只有 1 个进程在用(比如 nginx + php-fpm 共用 9000,它只会标成:9000) -
nload和iptraf-ng完全不碰进程信息,连lsof -i的能力都没有 - 临时应急可用:
ss -tunp | awk '{print $7}' | sort | uniq -c | sort -nr | head -5,但注意得有 root 权限,且无法反映瞬时峰值
真正做服务级带宽审计,得靠 cgroup v2 + tc 做出口限速并统计,或者用 ebpf_exporter 接 Prometheus。命令行三剑客只是帮你快速瞄一眼“有没有异常”,别指望它们给出根因。










