5154

Good Luck To You!

CentOS系统如何实时查看服务器网卡流量大小?

在管理和维护基于 CentOS 的服务器时,实时监控网卡流量是一项至关重要的任务,无论是进行性能调优、排查网络故障、检测异常流量,还是规划网络带宽,准确、及时地掌握网络接口的数据传输情况都是不可或缺的,本文将系统性地介绍在 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

CentOS系统如何实时查看服务器网卡流量大小?

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 会在后台持续运行,默默记录流量数据,几乎不消耗系统资源,当需要分析过去一周或一个月的带宽使用情况时,它提供的数据极具参考价值。

    CentOS系统如何实时查看服务器网卡流量大小?

为了方便您根据需求选择,下表小编总结了上述工具的特点:

工具名称 主要特性 适用场景 安装命令 (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 层的流量,而网卡(如 nloadip -s link)统计的是物理层或数据链路层的流量,IP 数据包在传输过程中,每个数据包都会被封装上以太网帧头、帧尾以及可能的 VLAN 标签等额外开销。iftop 可能会同时统计流入和流出的流量,而您在对比时可能只关注了单一方向。iftop 显示的各连接流量之和通常会略高于网卡接口的纯 IP 负载,这是正常的。

问题2:我如何设置一个任务,每隔5分钟记录一次当前网卡的实时速率到日志文件中?

解答: 您可以结合 cron 定时任务和脚本来实现,一个简单的方法是使用一个能直接显示速率的命令,如 nload 的非交互模式,或者通过计算 /proc/net/dev 的差值,这里提供一个使用 /proc/net/dev 的示例脚本:

  1. 创建一个脚本 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
  2. 给脚本执行权限:

    chmod +x log_traffic.sh
  3. 编辑 crontab:

    crontab -e
  4. 添加一行,让脚本每5分钟运行一次:

    */5 * * * * /path/to/your/log_traffic.sh

这样,系统就会每5分钟将网卡的累计流量记录到日志文件中,通过分析这个日志文件,您可以计算出任意时间段内的平均速率。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

«    2025年11月    »
12
3456789
10111213141516
17181920212223
24252627282930
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
    文章归档
    网站收藏
    友情链接

    Powered By Z-BlogPHP 1.7.3

    Copyright Your WebSite.Some Rights Reserved.