查5分钟内秒级瞬时峰值用 sar -n DEV 1 300,每秒采样1次、持续300秒,从rxkB/s和txkB/s列取最大值并换算为Mbps;日均最高小时流量用vnstat -d,其“max”为当日各小时平均速率的最大值;毫秒级毛刺需脚本轮询/proc/net/dev计算差值。

查5分钟内秒级瞬时峰值用 sar -n DEV 1 300
要拿到真实发生的“突发峰值”,必须抓到秒级速率,sar 是唯一能稳定输出带时间戳的瞬时值的系统级工具。它不依赖用户态轮询,直接读取内核计数器,误差小、开销低。
常见错误:sar -n DEV 不带参数会读缓存旧数据;sar -n DEV 60 1 只给一个模糊均值,根本看不到毛刺。
- 正确命令:
sar -n DEV 1 300—— 每秒采样1次,持续5分钟(300秒),输出里找rxkB/s和txkB/s列的最大值 - 单位是 kB/s,换算成 Mbps 要 ×8 ÷1024 ≈ ×0.0078125(不是 ÷125000,那是字节→Mbps的粗略换算)
- 结果只存在内存,重启后丢失;历史数据存在
/var/log/sa/sa$(date +%d),但默认只保留最近7天 - 如果
/var/log/sa/下没有当天文件,说明sysstat服务没启用,或/etc/cron.d/sysstat被注释了
查日均最高小时流量用 vnstat -d
vnstat 的 “peak” 不是秒级爆发值,而是某天里最忙那一小时的平均速率(单位 KB/s),本质是“日均峰值”,适合容量规划,不适合故障定位。
它靠轮询 /proc/net/dev 实现,数据持久、不丢、不依赖 root,但首次使用必须初始化:
- 先绑定网卡:
sudo vnstat -u -i eth0(否则报错No database found) - 首次采集至少等5分钟(默认采样间隔),
vnstat -l显示的是最近2分钟滑动均值,不是实时值 - 查每日峰值:
vnstat -d | grep "max";查整月汇总:vnstat -m - 注意:它的
max字段是“该天内每小时平均速率的最大值”,不是单秒冲高
抓毫秒级毛刺得自己轮询 /proc/net/dev
如果问题现象是“几秒内突增又回落”,sar 和 vnstat 都不够细——这时只能自己轮询 /proc/net/dev 计算差值。
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
/proc/net/dev 里的数值是累加字节数,单位是字节,需做两次读取再相减:
- 示例脚本片段:
watch -n 0.1 'cat /proc/net/dev | awk '\''NR==3 {print $2,$10}'\''(假设第3行是 eth0) - 输出是接收和发送的总字节数,用前后两次差值 ÷ 0.1 得到 B/s,再 ×8 ÷1000000 得 Mbps
- 别用 ÷125000 换算:那是字节→Mbps的近似值(125000 = 10^6 ÷ 8),但实际应严格按 1 Mbps = 1000000 bit/s = 125000 Byte/s
- 短时毛刺容易被
nload或iftop漏掉,因为它们默认刷新间隔是 500ms 或更长
别指望 iftop 或 nload 给历史峰值
iftop 界面里的 peak 是自启动以来的最高瞬时值,关掉就清零;nload 的 Max 也是当前会话内最大值,且无法导出时间序列。
它们的作用是“此刻看一眼”,不是“回溯查问题”:
-
iftop -i eth0 -B用字节显示更直观,但 peak 值仍不记录时间戳 -
nload eth0 -t 100 -a可延长历史曲线显示,但最多存几百个点,无法对应到具体时刻 - 两者都不保存数据,无法用于事后分析或告警联动
真正需要“突发峰值统计记录”,就得明确分层:秒级毛刺用脚本轮询 /proc/net/dev,5分钟粒度用 sar,长期趋势用 vnstat——没有一个命令能全包,只有组合才可靠。

















