0

0

Linux怎么统计某段时间内的带宽使用

P粉602998670

P粉602998670

发布时间:2025-09-16 08:24:01

|

615人浏览过

|

来源于php中文网

原创

答案是根据需求选择合适工具:长期趋势用vnstat,历史详细记录用sar,精确自定义统计则通过读取/proc/net/dev编写脚本实现,不同场景需分层处理以获得最佳效果。

linux怎么统计某段时间内的带宽使用

在Linux上统计某段时间内的带宽使用,核心思路是利用系统提供的工具或接口,在时间段的起点和终点获取网络流量数据,然后计算差值。常用的方法包括使用

vnstat
进行长期数据收集,或者利用
sar
命令查询历史记录,更精细的自定义统计则可以借助读取
/proc/net/dev
文件来实现。

当我在Linux系统上需要了解某个特定时间段的带宽使用情况时,我通常会根据需求选择不同的工具。这不是一个“一招鲜吃遍天”的问题,因为实时监控、长期趋势分析和精确到秒级的自定义统计,它们各自有最适合的解决方案。

解决方案

对我而言,最直接且有效的策略是分层处理:

1. 长期趋势与聚合数据:

vnstat
如果我需要的是每日、每月或每小时的聚合流量数据,并且希望这些数据能够持久化,那么
vnstat
几乎是我的首选。它作为一个轻量级的守护进程,默默地在后台收集数据。

安装通常很简单:

  • Debian/Ubuntu:
    sudo apt install vnstat
  • CentOS/RHEL:
    sudo yum install vnstat

安装后,确保它正在运行并监控你的网络接口(例如

eth0
):
sudo vnstat --create -i eth0
sudo systemctl enable vnstat && sudo systemctl start vnstat

一旦

vnstat
运行了一段时间,你就可以查询特定时间段的数据了。

  • 查看今天和昨天的日流量:
    vnstat -d
  • 查看本月和上个月的月流量:
    vnstat -m
  • 查看过去24小时的每小时流量:
    vnstat -h

通过这些命令,我可以快速了解到某个特定日期或时间段的大致流量消耗。比如,我发现某天晚上网络特别慢,我就可以用

vnstat -h
看看那个小时的流量是不是异常高。

一键职达
一键职达

AI全自动批量代投简历软件,自动浏览招聘网站从海量职位中用AI匹配职位并完成投递的全自动操作,真正实现'一键职达'的便捷体验。

下载

2. 历史详细记录与特定时间段查询:

sar
(System Activity Reporter)
sar
sysstat
工具包的一部分,它能记录非常详细的系统活动数据,包括网络接口的吞吐量。它的强大之处在于能够查询过去任意有记录的时间段。

sar
默认会把数据记录在
/var/log/sa/
目录下,文件名通常是
saXX
,其中
XX
是日期。 要查询今天上午9点到10点之间
eth0
接口的接收(rxkB/s)和发送(txkB/s)速率:
sar -n DEV -s 09:00:00 -e 10:00:00 -i 300
这里的
-n DEV
指定查看网络设备统计,
-s
-e
定义了时间段,
-i 300
表示每5分钟刷新一次,但对于历史数据查询,它会根据已有的日志记录来展示。

如果我想看昨天的同一时间段,就需要指定昨天的日志文件:

sar -f /var/log/sa/sa$(date -d 'yesterday' +%d) -n DEV -s 09:00:00 -e 10:00:00
这能让我追溯到某个特定故障发生前后的网络活动,对于故障排查非常有用。

3. 精确自定义时间段统计:

/proc/net/dev
与脚本 有时候,
vnstat
的聚合不够细致,
sar
的记录间隔又不是我想要的,或者我需要计算一个非常精确的、自定义持续时间内的总流量。这时,直接读取
/proc/net/dev
文件就成了唯一的选择。这个文件包含了所有网络接口的实时字节计数。

我通常会写一个简单的bash脚本来实现这个目的:

#!/bin/bash

INTERFACE="eth0" # 替换成你的网络接口,如 eth0, enp0s3, etc.
DURATION_SECONDS=300 # 监控持续时间,单位秒 (这里是5分钟)

echo "开始监控 $INTERFACE 接口的带宽使用,持续 ${DURATION_SECONDS} 秒..."

# 获取初始字节计数
read -r _ _ RX_BYTES_START TX_BYTES_START _ < <(grep "$INTERFACE:" /proc/net/dev | awk '{print $2, $10}')

# 等待指定时间
sleep "$DURATION_SECONDS"

# 获取最终字节计数
read -r _ _ RX_BYTES_END TX_BYTES_END _ < <(grep "$INTERFACE:" /proc/net/dev | awk '{print $2, $10}')

# 计算差异
RX_DIFF=$((RX_BYTES_END - RX_BYTES_START))
TX_DIFF=$((TX_BYTES_END - TX_BYTES_START))

# 转换为MB并计算平均速率 (KB/s)
TOTAL_RX_MB=$(echo "scale=2; $RX_DIFF / 1024 / 1024" | bc)
TOTAL_TX_MB=$(echo "scale=2; $TX_DIFF / 1024 / 1024" | bc)
AVG_RX_KBPS=$(echo "scale=2; $RX_DIFF / $DURATION_SECONDS / 1024" | bc)
AVG_TX_KBPS=$(echo "scale=2; $TX_DIFF / $DURATION_SECONDS / 1024" | bc)

echo "-------------------------------------"
echo "监控结束,持续时间:${DURATION_SECONDS} 秒"
echo "$INTERFACE 接收总流量: ${TOTAL_RX_MB} MB"
echo "$INTERFACE 发送总流量: ${TOTAL_TX_MB} MB"
echo "$INTERFACE 平均接收速率: ${AVG_RX_KBPS} KB/s"
echo "$INTERFACE 平均发送速率: ${AVG_TX_KBPS} KB/s"
echo "-------------------------------------"

这个脚本非常灵活,我可以根据需要调整

INTERFACE
DURATION_SECONDS
,实现任意时间段的精确统计。这对于排查某个特定时间窗口内的瞬时网络问题,或者需要为某个任务计算精确带宽消耗时,非常管用。

如何选择合适的Linux带宽监控工具?

选择合适的Linux带宽监控工具,对我来说,从来都不是一个“哪个最好”的问题,而是“哪个最适合我当前的需求”。我发现,理解不同工具的侧重点,能帮助我更快地定位问题。

  • 你需要实时性还是历史数据?
    • 如果你只是想快速看一眼当前哪个进程或IP在消耗大量带宽,那么
      iftop
      nload
      这类实时工具是首选。它们提供即时、可视化的反馈,但一旦关闭,数据就消失了。
    • 如果你的目标是分析过去一小时、一天甚至一个月的趋势,或者需要追溯某个历史时刻的网络状况,那么
      vnstat
      sar
      或更高级的监控系统(如Prometheus结合Grafana)就显得

相关专题

更多
硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

1051

2023.10.19

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

107

2025.10.17

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

694

2025.12.29

java接口相关教程
java接口相关教程

本专题整合了java接口相关内容,阅读专题下面的文章了解更多详细内容。

11

2026.01.19

go中interface用法
go中interface用法

本专题整合了go语言中int相关内容,阅读专题下面的文章了解更多详细内容。

76

2025.09.10

磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

1353

2023.06.21

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

704

2023.06.29

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

294

2023.06.30

c++空格相关教程合集
c++空格相关教程合集

本专题整合了c++空格相关教程,阅读专题下面的文章了解更多详细内容。

0

2026.01.23

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 7.7万人学习

Git 教程
Git 教程

共21课时 | 2.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号