想看小时级流量变化,必须用vnstat;它通过每5分钟轮询/proc/net/dev累计值存入SQLite数据库,支持vnstat -h查看该小时内总流量(单位MiB),但需提前初始化网卡数据库并启用服务,否则无法回溯历史。

想看小时级流量变化,必须用 vnstat
vnstat 是唯一能回溯历史走势的命令行工具,但它不实时抓包,而是每 5 分钟轮询 /proc/net/dev 累计值并存入本地 SQLite 数据库。没提前部署,就看不到过去的数据——这点没法补救。
初始化必须分两步:
先为指定网卡建库:sudo vnstat -u -i eth0
再启用服务持久采集:sudo systemctl enable vnstat && sudo systemctl start vnstat
- 查今天每小时流量:
vnstat -h(输出里rx/tx列单位是 MiB,默认按小时聚合) - 查最近 24 小时滚动趋势:
vnstat -h -d today - 注意:
vnstat -h显示的是“该小时内的总流量”,不是瞬时速率;要换算成平均带宽,得除以 3600 秒再乘 8(转 bit),比如 1200 MiB/h ≈ 2.8 Mbps
nload 只能看当前秒级波动,不能存图也不能回放
nload 界面里那两条跳动的曲线只是实时采样,背后没有时间戳记录。它适合盯屏判断“现在是不是跑满了”,但无法回答“三点到四点之间峰值出现在哪分钟”。
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
常见误操作是以为 nload -m(监控所有网卡)能导出数据,其实它不写日志、不支持重定向输出——按 Ctrl+C 就断了,什么也没留下。
- 单位容易看错:
nload默认用 kbit/s 或 Mbit/s,和iftop -B的字节单位(KB/s)差 8 倍,别直接对比 - 想临时抓一段趋势?只能靠
watch -n 1 'cat /proc/net/dev | grep eth0'手动录屏或复制粘贴,再自己算差值
iftop 和 nethogs 都不存历史,连“上一秒多少”都答不上
iftop 界面右栏的 2s/10s/40s 是滑动窗口均值,不是历史快照;nethogs 更只显示“当前活跃连接”的瞬时速率。它们本质是流式监听器,内存里不留痕。
- 有人试过
iftop -t -L 100想导出文本——确实能输出,但每行都是当前时刻的刷新结果,没有时间字段,没法对齐成时间序列 - 如果真需要连接级的历史回溯,得自己搭方案:
tcpdump -i eth0 -w /tmp/traffic.pcap抓包 +tshark -r /tmp/traffic.pcap -T fields -e frame.time_epoch -e ip.src -e ip.dst -e frame.len提特征,但这会吃磁盘、占 CPU,不适合长期开
真正能画走势图的,只有 vnstat + 第三方脚本
vnstat 自带的 vnstati 可以生成 PNG 图表,但依赖 ImageMagick,且默认只支持日/月视图;小时级走势图得靠外部工具拼接。
- 最简方案:
vnstat -h | awk '/^[0-9]/{print $1":"$2, $3+$4}' | column -t提取小时+总流量,喂给 gnuplot 或 Python matplotlib - 注意数据库路径:
/var/lib/vnstat/下是 SQLite 文件,别手动删,否则历史全丢 - 容器环境或无 systemd 系统(如 Alpine)需改用
vnstatd手动启守护进程,且确保 crontab 每 5 分钟执行一次vnstat -u

















