直接看实时总吞吐量用nload最省事,定位IP/端口需iftop,归因到进程靠nethogs,查历史趋势用vnstat;nload报“Device eth0 not found”因现代Linux网卡名已改为ens33等,需先用ip -br a查真实接口名再指定运行。

直接看实时总吞吐量,用 nload 最省事;想定位是哪个 IP 或端口在吃带宽,必须用 iftop;要归因到具体进程,得靠 nethogs;查历史趋势或月度用量,vnstat 是唯一靠谱选择。
用 nload 看网卡总流量时为什么显示 “Device eth0 not found”
因为现代 Linux 发行版(尤其是 systemd + udev 的系统)默认网卡名不是 eth0,而是 ens33、enp0s3 或 eno1 这类可预测命名。运行 nload 时它自动找第一个非 loopback 接口,但若该接口已 down 或被重命名,就会报错。
- 先查真实接口名:
ip -br a或ls /sys/class/net/,过滤掉lo - 指定接口启动:
nload ens33,别硬写eth0 - 按左右方向键切换多个活跃接口(前提是它们都 up)
-
-u M强制单位为 Mbps(注意是兆比特,不是兆字节),避免误读成文件传输速度 - 别用
nload -m同时监控多个接口——界面会挤,且各接口刷新不同步,峰值容易误判叠加
iftop 报错 “Unable to get list of interfaces” 怎么办
这通常不是配置问题,而是权限或依赖缺失:普通用户无权访问原始网络设备(AF_PACKET socket),且 iftop 依赖 libpcap 库抓包。
- Ubuntu/Debian 上补全依赖:
sudo apt install iftop libpcap-dev - CentOS/RHEL 8+:
sudo dnf install iftop libpcap;RHEL 7/CentOS 7 需先启用 EPEL:sudo yum install epel-release && sudo yum install iftop libpcap - 启动时必须加
sudo,否则连接口列表都拿不到 - 加
-n -N是刚需:禁 DNS 解析(-n)+ 显示端口号而非服务名(-N),否则界面卡顿、信息冗余 - 容器环境(如 LXC/OpenVZ)可能根本跑不起来 —— 缺少
AF_PACKET权限,此时换nload或/proc/net/dev更实际
为什么 nload 和 iftop 显示的数值差一倍还多
单位混淆是主因:nload 默认单位是 kBit/s,iftop 默认是 B/s(字节每秒),而 1 Byte = 8 bits —— 直接对比必然翻车。
-
nload的M是 Mbit/s:显示100.00 M≈ 12.5 MB/s -
iftop的顶部2.4KB是 KB/s(即 2400 Bytes/s ≈ 19.2 Kbit/s) - 两者原理也不同:
nload读/proc/net/dev,统计内核收发字节数,零开销;iftop用libpcap抓包,能区分连接和端口,但会漏掉本地回环、被防火墙 DROP 的包,且有轻微 CPU 开销 - 看到流量接近标称带宽(比如千兆口显示 115MB/s),别急着断定“跑满”——用
ethtool ens33看协商速率:Speed: 1000Mb/s对应理论上限 125MB/s,TCP/IP 协议开销会让持续吞吐卡在 110–115MB/s 左右
想确认到底哪个进程在发包,nethogs 为什么只显示 unknown TCP
nethogs 依赖网络命名空间和 /proc 文件系统映射进程网络活动,某些环境会失效。
- 必须用
sudo nethogs eth0,否则看不到其他用户进程 - 容器内运行时,若未共享宿主机网络命名空间(
--network host),nethogs在容器里只能看到自己进程;在宿主机上运行才能看到容器内进程 - systemd socket 激活的服务(如
sshd.socket)或短生命周期进程,可能来不及被捕获,表现为unknown TCP - Java 进程统一显示为
java,需配合ps aux --forest | grep $PID查启动参数 - 如果界面空白,先检查是否所有进程都在同一网络命名空间 —— Kubernetes Pod、Docker 默认隔离,
nethogs在节点上运行才有效
真正麻烦的从来不是工具不会用,而是你没意识到:nload 不告诉你谁在传,iftop 不告诉你哪个进程,nethogs 在容器里基本失灵,vnstat 初始化前的数据全丢。选工具前,先问自己——你要的答案,在哪一层?


















