sar可通过-n DEV选项结合-s/-e/-f参数从历史日志提取指定时间段内网卡每秒收发字节数,取平均后换算为KB/s或Mbps;需依赖sa1采集的日志,默认存于/var/log/sa/saDD。

要统计特定时间段的平均网络带宽,sar 本身不直接提供“带宽 Mbps”这种单位的直观输出,但它能采集网络接口的收发字节数(bytes/sec),再通过换算得到带宽。关键在于使用 -n DEV 选项,并配合时间范围控制(-s 和 -e)及历史数据源(-f)。
核心逻辑是:从历史日志中提取某段时间内各网卡每秒收发字节数 → 取平均值 → 换算为 KB/s 或 Mbps
✅ 确保数据已采集
sar 的历史数据默认由 sa1 脚本每10分钟采集一次,存于 /var/log/sa/saDD(DD 是当天日期,如 sa30 表示7月30日)。
若未启用自动采集,需先启动 sysstat 服务:
sudo systemctl start sysstat sudo systemctl enable sysstat
⚠️ 注意:实时运行
sar -n DEV 1 5只能获取当前时刻的瞬时值,无法回溯。要查“过去某段时间”,必须依赖已保存的日志。
✅ 查看指定时间段的网络收发速率(字节/秒)
假设你想查 今天上午 10:00 到 11:30 的平均网络带宽(以 eth0 为例):
sar -n DEV -s 10:00:00 -e 11:30:00 -f /var/log/sa/sa30 | grep "eth0"
-
-n DEV:采集网络设备统计(收发包数、字节数等) -
-s 10:00:00:起始时间(24小时制) -
-e 11:30:00:结束时间 -
-f /var/log/sa/sa30:读取7月30日的日志(日期需与当前匹配,可用date +%d获取)
输出类似:
10:00:01 AM eth0 1245.67 987.32 ... 10:10:01 AM eth0 1302.11 956.44 ...
其中第二列为 rxkB/s(接收千字节/秒),第三列为 txkB/s(发送千字节/秒)。
✅ 计算平均带宽(推荐用 shell 快速汇总)
直接加管道求平均(以 rxkB/s 为例):
sar -n DEV -s 10:00:00 -e 11:30:00 -f /var/log/sa/sa30 | \
awk '/eth0$/ {rx += $3; tx += $4; n++} END {if(n>0) printf "Avg RX: %.2f KB/s, Avg TX: %.2f KB/s (n=%d)\n", rx/n, tx/n, n}'换算为 Mbps(1 MBps = 8 Mbps,1 KB/s = 0.008 Mbps):
-
Avg RX: 1250 KB/s→1250 × 0.008 = 10.00 Mbps - 同理计算 TX
✅ 补充说明
- 若需查看所有网卡,去掉
grep "eth0";若不确定网卡名,先运行sar -n DEV -f /var/log/sa/sa30 | head -10查看表头 -
rxkB/s和txkB/s是最贴近“带宽”的指标,比rxpck/s(包数)更能反映真实吞吐压力 - 实时监控某时段带宽(非历史)不可行——sar 不支持在运行中限定时间窗口,只能靠外部脚本+
timeout+awk聚合,但精度低、不推荐用于诊断
不复杂但容易忽略


















