突发流量必须用高采样率工具捕获,/proc/net/dev仅提供累计值无法反映瞬时峰值;iftop加-t-s参数可输出连接级历史最高速率,nethogs能导出进程级秒级均值及隐含瞬时极值,sar -n dev是唯一支持定期存档设备层瞬时速率的系统方案。

突发流量只能靠实时工具抓,/proc/net/dev 不行
/proc/net/dev 里只有累计字节数,比如 rx_bytes 和 tx_bytes,它不记录瞬时速率或峰值。你用 watch -n 1 'cat /proc/net/dev' 对比两次差值能算出平均速率,但“突发”意味着毫秒级尖峰——这个文件每秒最多更新一次,根本捕不到。想确认是否真有突发,得用能采样频率更高、带峰值标记的工具。
iftop -P 能看到连接级瞬时峰值,但不是“记录”
iftop 默认界面右侧那列数字(如 12.45MB)就是当前连接的**历史最高瞬时速率**,不是当前速率,也不是时间戳记录。它只在内存里维护一个滑动窗口峰值,退出就丢。你无法回溯“3分钟前 eth0 上哪个 IP 突发了 800Mbps 持续 200ms”。要留痕,必须加 -t 非交互模式 + 重定向:
-
sudo iftop -n -i eth0 -P -t -s 5 > iftop.log:每 5 秒输出一次当前连接列表和各自峰值,文本可 grep - 注意:
-P显示端口,-t关闭交互,-s 5是刷新间隔,不能小于 1 秒 - 输出里没有时间戳字段,得靠 shell 包一层:
while true; do echo "$(date):"; sudo iftop -n -i eth0 -P -t -s 1 -L 10; sleep 1; done >> iftop-peak.log
nethogs 可导出进程级突发,但依赖活跃连接
nethogs 的“突发”感知比 iftop 更贴近应用层——它按进程聚合,每秒刷新一次速率,界面上显示的 sent/received 是最近一秒均值,但内部会记下该秒内最大瞬时值(不暴露给用户)。真正能导出的是它的日志模式:
在无 root/sudo 权限的环境(云容器、VPS、隔离主机)中安装并配置 OpenClaw 浏览器工具的 headless Chrome。适用场景:...
-
sudo nethogs -i eth0 -d 1 -c 60 > nethogs-1min.log:每秒采样,共 60 行,含 PID、程序名、KB/s 值 - 之后用
awk '{print $4}' nethogs-1min.log | sort -nr | head -5找出 top5 瞬时高点 - 坑点:如果某个进程只发一个 10MB 包然后休眠,
nethogs会在那一秒显示很高值,但下一秒归零——它不区分“持续吞吐”和“单次爆发”,容易误判
长期存突发记录?vnstat 不行,sar -n DEV 可以但需提前开
vnstat 只存 5 分钟粒度累计值,完全没能力捕突发。sar -n DEV 是唯一能定期存网络设备瞬时速率的系统级方案,但它默认不启用,且采样间隔最小 1 秒:
- 先确保
sysstat已安装并启用收集:sudo systemctl enable sysstat && sudo systemctl start sysstat - 编辑
/etc/cron.d/sysstat,把*/10 * * * * root command -v sadc > /dev/null && sadc -F -L -O /var/log/sysstat/sa$(date +\%d) 1 1改成*/1 * * * * root ... sadc -F -L -O ... 1 1(每分钟采 1 次,每次间隔 1 秒) - 查最近一小时的 eth0 突发:
sar -n DEV -f /var/log/sysstat/sa$(date -d "1 hour ago" +\%d) | grep eth0 | awk '{print $5,$6}' | sort -nr | head -3 - 注意:
sar记录的是接口层速率,单位是 KB/s,不是包速;且历史文件只保留最近 7 天(默认),过期自动删
真正的突发(tcpdump 抓包分析,但那是另一层开销和存储问题——日常运维里,sar -n DEV 的 1 秒粒度,已经是最务实的“记录”底线。










