当服务器感觉变慢或连接饱和时,通常第一个问题就是“是什么占用了带宽?”答案取决于你需要看到什么:接口的总速率、传输数据最多的单个连接、跨越多个接口的图表,或者本月已传输的数据量。没有单一工具能很好地完成所有这些任务,因此了解哪个工具适合每个问题很有帮助。

本指南比较了四种命令行带宽监控工具: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 iftop

iftop 需要捕获数据包,因此必须以 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 vnstat

vnstat 需要时间来收集数据,因为它定期采样接口计数器而不是捕获数据包。运行一段时间后,查看摘要:

终端

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 允许你从其列表中选择一个。