最轻量方式是读取/proc/net/dev的累计字节数,结合时间差计算瞬时带宽;iftop适合定位异常连接但需加-n避免DNS卡顿;sar -n DEV提供稳定数值便于脚本分析;nload适合盯屏看趋势但无历史记录。

直接看 /proc/net/dev 里的原始字节数
这是最轻量、无需安装任何工具的方式,所有 Linux 内核都暴露这个接口。它不显示“实时速率”,但给出的是自系统启动以来的累计收发字节数,只要两次读取时间差已知,就能算出瞬时带宽。
常见错误现象:cat /proc/net/dev 输出里字段对不齐、找不到自己网卡(比如看到 ens33 却误认成 eth0)、单位混淆(误把字节当比特)。
- 先确认网卡名:
ip -br a或ls /sys/class/net/,避开已废弃的eth0命名习惯 - 只关注你关心的网卡行,例如
ens33:后面第 2 列是rx_bytes,第 10 列是tx_bytes - 用
watch -n 1 'cat /proc/net/dev | grep ens33'每秒刷新一次,肉眼观察两行数字差值 - 换算成 Mbps:差值(字节)÷ 时间间隔(秒)÷ 125000(不是 125),因为 1 Mbps = 1,000,000 bps = 125,000 B/s
用 iftop 看谁在连、占多少带宽
iftop 不是看“总流量”,而是看“连接级实时吞吐”,适合快速定位异常 IP 或端口。它默认按总流量倒序排列,但容易被 DNS 解析拖慢或干扰(比如卡在 resolving...)。
使用场景:怀疑某台外部机器打爆了你的带宽,或内部服务被某个客户端持续拉流。
- 必须加
-n(禁用 DNS 反解),否则界面会卡住或延迟高 - 指定网卡避免监听错接口:
sudo iftop -i ens33 -n -B(-B表示以字节为单位,更直观) - 按
P键可显示端口号;按T可切换显示模式(当前速率 / 2s均值 / 10s均值) - 过滤特定端口:
sudo iftop -i ens33 -f "port 443",注意引号不能省,否则 shell 会截断
sar -n DEV 1 查每秒接口级收发速率
sar 来自 sysstat 包,输出稳定、字段明确、支持历史回溯,是做性能分析或写监控脚本时最可靠的选项。但它不提供图形或连接详情,纯数值流。
关键点:输出中的 rxkB/s 和 txkB/s 是“千字节每秒”,不是兆比特——别和运营商带宽单位搞混。
- 安装后需确保
sysstat服务启用并运行(sudo systemctl enable --now sysstat),否则首次运行可能无数据 - 执行
sar -n DEV 1 3表示每 1 秒采样一次,共 3 次;末尾的Average:行是均值,别误当成瞬时峰值 - 字段
%ifutil在部分内核版本中为空,不可依赖;真正反映负载的是rxkB/s和txkB/s的绝对值趋势 - 若想导出 CSV 分析,加
-o /tmp/sar.net,再用sar -n DEV -f /tmp/sar.net读取
nload 最适合盯屏看趋势
nload 的双通道滚动图(RX/TX)对人眼友好,响应快、不解析 DNS、资源占用低,适合运维人员在终端里长期挂着看。但它不记录历史、不支持过滤、也不能按进程或连接下钻。
容易踩的坑:默认监控第一个非 loopback 网卡,可能不是你要的那个;左右键切换网卡时容易误操作退出。
- 启动时直接指定网卡:
sudo nload ens33,比默认行为更可控 - 界面顶部显示的是当前速率(实时),底部是累计流量(自启动起),注意区分
- 按
m可切换单位(Bytes / kBytes / MBytes),但不会自动换算为 Mbps,得自己心算 ×8 - 没有快捷键能冻结画面,要截图只能靠终端截屏或
tmux capture-pane
nload 看总流量是否异常,再用 iftop -n -B 找出具体连接,最后用 sar -n DEV 1 抓一段稳定数据做横向对比。别忘了,所有这些工具读的底层数据源几乎都来自 /proc/net/dev,只是解析方式和呈现逻辑不同。


















