在管理和维护基于 CentOS 的服务器时,实时监控网卡流量是一项至关重要的任务,无论是进行性能调优、排查网络故障、检测异常流量,还是规划网络带宽,准确、及时地掌握网络接口的数据传输情况都是不可或缺的,本文将系统性地介绍在 CentOS 系统中查看实时网卡流量的多种方法,从基础命令到功能强大的交互式工具,帮助您根据不同场景选择最合适的解决方案。

基础命令:快速概览
对于需要快速查看网卡总体流量统计的场景,系统内置的一些基础命令就能满足需求,这些命令无需额外安装,是每个系统管理员都应掌握的基本技能。
使用 ip 命令
ip 命令是现代 Linux 发行版中替代 ifconfig 的标准网络配置工具,通过结合 -s link 参数,它可以显示详细的网络接口统计信息。
ip -s link show ens33
执行上述命令后,您会看到类似以下的输出:
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
link/ether 00:0c:29:xx:xx:xx brd ff:ff:ff:ff:ff:ff
RX: bytes packets errors dropped overrun mcast
1234567890 1234567 0 0 0 0
TX: bytes packets errors dropped carrier collsns
987654321 987654 0 0 0 0
altname enp0s3
这里的 RX(Receive)和 TX(Transmit)分别代表接收和发送。
- bytes: 接收/发送的总字节数。
- packets: 接收/发送的数据包总数。
- errors: 发生错误的包数量。
- dropped: 因缓冲区不足等原因被丢弃的包数量。
这个命令提供的是自网卡启动以来的累计值,适合用于宏观统计。
读取 /proc/net/dev 文件
Linux 内核将网络接口的实时统计数据保存在 /proc/net/dev 这个虚拟文件中,直接查看该文件可以获得最原始的数据,非常适合用于脚本化监控。
cat /proc/net/dev
输出结果如下:
Inter-| Receive | Transmit
face |bytes packets errs drop fifo frame compressed multicast|bytes packets errs drop fifo colls carrier compressed
ens33: 1234567890 1234567 0 0 0 0 0 0 987654321 987654 0 0 0 0 0 0
lo: 1048576 1234 0 0 0 0 0 0 1048576 1234 0 0 0 0 0 0
该文件的列与 ip -s link 的输出基本一致,但格式更利于程序解析,通过定时读取此文件并计算差值,可以实现自定义的流量监控脚本。
交互式实时监控工具:动态视图
当需要动态、直观地观察流量变化时,交互式命令行工具是最佳选择,它们通常以图形化的方式(在终端内)实时刷新数据,让流量趋势一目了然。
nload

nload 是一个非常简洁直观的工具,它以图形条的形式实时显示网卡的流入和流出速率。
- 安装:
# CentOS 7 sudo yum install epel-release sudo yum install nload # CentOS 8/9 sudo dnf install epel-release sudo dnf install nload
- 使用:
nload
运行后,
nload会显示所有可用网卡的实时流量图,您可以使用左右方向键在不同网卡间切换,界面清晰地显示了当前流入、流出的速率以及平均值、最大值和最小值,非常适合快速评估当前网络负载。
iftop
如果说 nload 是关注“总量”,iftop 则更关注“细节”,它类似于网络版的 top 命令,可以实时显示各个网络连接(按源/目的IP和端口)所占用的带宽。
- 安装:
sudo yum install iftop # 或 sudo dnf install iftop
- 使用:
sudo iftop -i ens33
iftop的界面会列出占用带宽最高的连接,并显示每个连接的实时速率,这对于排查哪个进程或IP地址正在消耗大量带宽非常有用,当服务器响应变慢时,可以通过iftop快速定位是否存在异常的流量洪泛。
bmon (Bandwidth Monitor)
bmon 是一个功能更强大且高度可配置的带宽监控和速率估算工具,它支持多种输出模块,包括可交互的 curses 界面、HTML 页面等。
- 安装:
sudo yum install bmon # 或 sudo dnf install bmon
- 使用:
bmon
bmon的默认界面会以图形化的方式展示每个网卡的流量,并支持通过键盘操作进入更详细的统计视图,它还可以将数据输出到其他程序或文件,便于集成到更复杂的监控系统中。
长期流量统计与历史记录
除了实时监控,了解服务器在过去一段时间内的流量趋势同样重要。vnstat 就是这样一款专注于后台记录和展示流量历史的工具。
-
安装与初始化:
sudo yum install vnstat # 或 sudo dnf install vnstat # 安装后,需要为指定网卡创建数据库 sudo vnstat -i ens33 -u
-
查看历史数据:
# 查看日、月、日平均等汇总信息 vnstat # 查看每小时流量 vnstat -h # 查看每日流量 vnstat -d # 查看每月流量 vnstat -m
vnstat会在后台持续运行,默默记录流量数据,几乎不消耗系统资源,当需要分析过去一周或一个月的带宽使用情况时,它提供的数据极具参考价值。
为了方便您根据需求选择,下表小编总结了上述工具的特点:
| 工具名称 | 主要特性 | 适用场景 | 安装命令 (dnf/yum) |
|---|---|---|---|
ip -s link |
内置、累计统计、无实时刷新 | 快速检查自启动以来的总流量 | 无需安装 |
/proc/net/dev |
原始数据、适合脚本解析 | 编写自定义监控脚本 | 无需安装 |
nload |
图形化、实时速率、简洁直观 | 快速评估当前网络负载 | install nload |
iftop |
按连接显示带宽、类似top | 排查高带宽消耗的连接或IP | install iftop |
bmon |
功能强大、可配置、多模块输出 | 深入分析、集成到监控系统 | install bmon |
vnstat |
后台记录、历史数据统计 | 分析长期流量趋势和用量 | install vnstat |
相关问答FAQs
问题1:为什么 iftop 显示的流量总和远大于网卡的总流量?
解答: 这是一个常见的现象,主要原因是 iftop 统计的是 IP 层的流量,而网卡(如 nload 或 ip -s link)统计的是物理层或数据链路层的流量,IP 数据包在传输过程中,每个数据包都会被封装上以太网帧头、帧尾以及可能的 VLAN 标签等额外开销。iftop 可能会同时统计流入和流出的流量,而您在对比时可能只关注了单一方向。iftop 显示的各连接流量之和通常会略高于网卡接口的纯 IP 负载,这是正常的。
问题2:我如何设置一个任务,每隔5分钟记录一次当前网卡的实时速率到日志文件中?
解答: 您可以结合 cron 定时任务和脚本来实现,一个简单的方法是使用一个能直接显示速率的命令,如 nload 的非交互模式,或者通过计算 /proc/net/dev 的差值,这里提供一个使用 /proc/net/dev 的示例脚本:
-
创建一个脚本
log_traffic.sh:#!/bin/bash INTERFACE="ens33" LOG_FILE="/var/log/traffic.log" # 获取当前时间 TIMESTAMP=$(date "+%Y-%m-%d %H:%M:%S") # 读取当前接收和发送的字节数 RX_BYTES=$(cat /proc/net/dev | grep $INTERFACE | awk '{print $2}') TX_BYTES=$(cat /proc/net/dev | grep $INTERFACE | awk '{print $10}') # 将时间戳和字节数写入日志文件 echo "$TIMESTAMP RX: $RX_BYTES, TX: $TX_BYTES" >> $LOG_FILE -
给脚本执行权限:
chmod +x log_traffic.sh
-
编辑 crontab:
crontab -e
-
添加一行,让脚本每5分钟运行一次:
*/5 * * * * /path/to/your/log_traffic.sh
这样,系统就会每5分钟将网卡的累计流量记录到日志文件中,通过分析这个日志文件,您可以计算出任意时间段内的平均速率。