5分钟内瞬时速率峰值须用sar -n dev 1 300,每秒采样一次共300次,取rxkb/s和txkb/s列最大值;vnstat用于日/月级小时平均流量分析,需先初始化绑定网卡;iftop/nload仅适合实时监控,无法回溯历史峰值;秒级毛刺需轮询/proc/net/dev并换算单位。

查 5 分钟内瞬时速率峰值用 sar -n DEV
要抓最近 5 分钟内网卡每秒的真实流量尖峰(单位 KB/s),必须用 sar -n DEV 1 300:每秒采样一次,共 300 次。输出中 rxkB/s 和 txkB/s 列的最大值就是这期间的瞬时峰值。
常见踩坑点:
- 直接运行
sar -n DEV—— 它读的是上一次缓存,不是当前实时数据 - 用
sar -n DEV 60 1想看“1 分钟平均”—— 这只给一个模糊均值,完全抓不到爆发点 - 查
/var/log/sa/sa$(date -d yesterday +%d)却找不到文件 ——sysstat服务没启用,或/etc/cron.d/sysstat被注释了
查日/月级“最高小时平均流量”用 vnstat
vnstat 的 “max” 字段不是秒级峰值,而是某天里最忙那一小时的平均速率(单位 KB/s)。它靠轮询 /proc/net/dev 实现,数据持久、不丢、重启也不中断。
使用前必须初始化:
- 先绑定网卡:
sudo vnstat -u -i eth0(否则报错No database found) - 首次采集至少等 5 分钟(默认采样间隔),
vnstat -l显示的“实时”其实是最近 2 分钟滑动均值 - 查每日峰值:
vnstat -d | grep "max";查整月汇总:vnstat -m
别指望 iftop 或 nload 给历史峰值
iftop 界面里的 peak 是自启动以来的最高瞬时值,关掉就清零;nload 的 Max 也是当前会话内最大值,且默认每 500ms 刷新一次,短于 500ms 的毛刺根本捕获不到。
它们只适合盯当下,不适合回溯或比对趋势。
真要抓秒级突发峰值得自己轮询 /proc/net/dev
内核计数器在 /proc/net/dev 里是累加字节数,单位字节。要算秒级增量峰值,得每 0.1 秒读一次并做差值:
watch -n 0.1 'cat /proc/net/dev | awk '\''NR==3 {print $2,$10}'\'' | awk '\''{print $1-prev1, $2-prev2; prev1=$1; prev2=$2}'\'' | sort -n | tail -1
注意换算:结果除以 125000 才是 Mbps(不是 1024×1024),因为 1 Mbps = 10⁶ bit/s = 125000 Byte/s。
这个方法能抓到 sub-second 级毛刺,但代价是频繁轮询、无自动存储、需自行解析——它不是替代方案,而是补位手段。
实际部署时,vnstat 看长期趋势和容量规划,sar 做故障复盘的 5 分钟粒度回溯,而秒级毛刺只能靠脚本硬扛。没有统一的历史峰值视图,只有分层取舍。











