当服务器感觉变慢或连接饱和时,通常第一个问题就是“是什么占用了带宽?”答案取决于你需要看到什么:接口的总速率、传输数据最多的单个连接、跨越多个接口的图表,或者本月已传输的数据量。没有单一工具能很好地完成所有这些任务,因此了解哪个工具适合每个问题很有帮助。
本指南比较了四种命令行带宽监控工具:nload、iftop、bmon 和 vnstat。每一种都体积小,包含在默认软件源中,并且针对网络使用的不同角度而构建。
nload:单接口吞吐量
nload 是这四种中最简单的。它以实时方式显示单个接口的入站和出站速率,并带有小型 ASCII 图表和运行统计信息。它回答了“这个接口此刻数据传输有多快?”这个问题。
在 Ubuntu、Debian 及其衍生版上安装:
终端
sudo apt install nload在 Fedora、RHEL 及其衍生版上,使用 dnf 安装。在兼容 RHEL 的系统上,如果软件包不可用,请先启用 EPEL:
终端
sudo dnf install nload不带参数运行它以监控默认接口,或直接指定接口名称:
终端
nload eth0显示分为入站和出站部分,每部分显示当前速率以及平均、最小、最大和总传输量:
输出
Device eth0 [192.168.1.50] (1/1):
Incoming:
Curr: 4.21 MBit/s
Avg: 2.88 MBit/s
Max: 9.10 MBit/s
Ttl: 1.42 GByte
Outgoing:
Curr: 512.00 kBit/s
Avg: 320.10 kBit/s当存在多个接口时,左右方向键可在它们之间循环。按 q 退出。nload 不需要 root 权限,这使其成为快速查看原始吞吐量的最快方式。
iftop:按连接的带宽
nload 告诉你有多少流量在流动,但不知道它流向哪里。iftop 填补了这一空白。它像 top 一样用于网络,列出按带宽排序的活跃连接,以便你可以看到哪些主机和端口负责负载。
在 Ubuntu、Debian 及其衍生版上安装:
终端
sudo apt install iftop在 Fedora、RHEL 及其衍生版上,使用 dnf。在兼容 RHEL 的系统上,如果软件包不可用,请先启用 EPEL:
终端
sudo dnf install iftopiftop 需要捕获数据包,因此必须以 root 身份运行。将其指向一个接口:
终端
sudo iftop -i eth0每一行显示一对主机及其之间的带宽,平均值为过去 2、10 和 40 秒:
输出
=> 192.168.1.50 4.10Mb 3.85Mb 3.20Mb
192.0.2.14 <= 256Kb 210Kb 180Kb默认情况下,iftop 将 IP 地址解析为主机名,将端口号解析为服务名称,这可能会很慢并杂乱视图。三个标志使其在繁忙的服务器上更有用:-n 跳过 DNS 主机名查找,-N 以数字而非服务名称显示端口,-P 显示端口列以便你可以知道哪个服务负责:
终端
sudo iftop -i eth0 -nNP按 q 退出。当你需要找到饱和链路的连接时,iftop 是首选工具。然后使用 ss 命令识别端口背后的本地进程。
bmon:一目了然的多个接口
bmon(带宽监控器)是当你想同时监控多个接口时的正确选择。它列出每个接口及其当前接收和发送速率,并为选定的接口绘制实时图表,这对于拥有许多网卡和网桥的路由器、网关和虚拟化主机非常有用。
在 Ubuntu、Debian 及其衍生版上安装:
终端
sudo apt install bmon在 Fedora、RHEL 及其衍生版上,使用 dnf。在兼容 RHEL 的系统上,如果软件包不可用,请先启用 EPEL:
终端
sudo dnf install bmon不带参数启动它:
终端
bmon顶部面板列出所有接口及其 RX 和 TX 速率。使用方向键高亮显示一个接口,底部面板更新其图表以匹配。按 d 切换详细计数器(如错误和丢弃的数据包),按 q 退出。bmon 读取内核计数器,基本监控不需要 root。
vnstat:随时间推移的历史使用情况
前三种工具显示当前发生的事情,并在你退出时立即忘记。vnstat 不同:它作为后台服务运行,将每个接口的流量记录到数据库中,并按小时、天和月报告使用情况。它回答“我本月使用了多少数据?”而不是“现在的速率是多少?”,这使其成为用于使用限制和容量规划的工具。
在 Ubuntu、Debian 及其衍生版上安装并启用服务:
终端
sudo apt install vnstat
sudo systemctl enable --now vnstat在 Fedora、RHEL 及其衍生版上,先安装软件包。在兼容 RHEL 的系统上,如果软件包不可用,请先启用 EPEL:
终端
sudo dnf install vnstat
sudo systemctl enable --now vnstatvnstat 需要时间来收集数据,因为它定期采样接口计数器而不是捕获数据包。运行一段时间后,查看摘要:
终端
vnstat输出
eth0 since 2026-01-01
rx: 42.18 GiB tx: 8.04 GiB total: 50.22 GiB
monthly
rx | tx | total
------------------------+-------------+------------
2026-01 42.18 GiB | 8.04 GiB | 50.22 GiB几个标志更改报告周期:vnstat -h 用于小时,vnstat -d 用于天,vnstat -m 用于月。对于类似于其他工具的实时速率显示,使用 vnstat -l,它显示当前吞吐量,直到你按 Ctrl+C。由于守护进程持续记录,历史记录在重启后仍然存在。
使用哪个工具
这四种工具略有重叠,但每种都有明确的最佳用途:
| 工具 | 显示 | 需要 root | 最佳用途 |
|---|---|---|---|
| nload | 每个接口的入/出速率 | 否 | 快速查看总吞吐量 |
| iftop | 每个连接的带宽 | 是 | 查找使用链路的主机或端口 |
| bmon | 所有接口加图表 | 否 | 拥有多个接口的系统 |
| vnstat | 历史小时/天/月总量 | 否 | 跟踪随时间的使用和配额 |
在实践中,许多管理员让 vnstat 运行以保留历史记录,并在需要调查实时激增时转向 iftop。
故障排除
安装后出现 command not found
使用 apt list --installed | grep <tool> 或 dnf list installed <tool> 确认已安装的软件包。在 Ubuntu 上,该软件包可能在 universe 软件源中;在兼容 RHEL 的系统上,你可能需要先启用 EPEL。
iftop 不显示流量
iftop 必须以 root 身份运行并指向活动接口。使用 ip link 列出接口,并使用 -i 传递正确的接口。除非选择 lo,否则回环接口的流量不会出现。
vnstat 报告“目前数据不足”
守护进程尚未收集完整的采样间隔。使用 systemctl status vnstat 确认服务正在运行,并等待几分钟以获取第一个数据点。
虚拟接口上的速率看起来不正确
网桥、绑定和 VLAN 接口报告聚合计数器。同时监控底层物理接口以查看流量实际进入主机的位置。
常见问题解答
哪个工具显示每个进程的带宽?
这四种工具都没有直接将流量映射到进程。iftop 按连接显示;要将连接与进程关联,使用 ss -tp 或 nethogs,后者按进程分组带宽。
这些工具可以在 SSH 上工作吗?
是的。所有四种都是终端应用程序,在 SSH 会话中运行良好,这正是它们在无头服务器上使用的情况。
vnstat 会减慢网络吗?
不会。vnstat 定期读取接口计数器而不是检查数据包,因此即使在繁忙的链路上,其开销也可忽略不计。
我可以只监控特定接口吗?
是的。nload、iftop 和 vnstat 都接受接口名称(例如 eth0),bmon 允许你从其列表中选择一个。