直接看实时流量用iftop需加-n关闭dns解析并指定网卡;查进程带宽用nethogs;图形化趋势用nload;历史流量必须提前部署vnstat并初始化数据库,否则无法回溯。

直接看实时流量,iftop 最快,但必须加 -n 关 DNS 解析,否则卡住或显示 unknown host;查哪个进程在吃带宽,nethogs 是唯一按进程聚合的命令行工具;想看趋势图又不想装 GUI,nload 画两条曲线最省事;历史数据?没提前装 vnstat 就真没有——它不回溯,只从安装后开始记。
iftop 看连接级实时流量,但默认配置会拖慢甚至卡死
iftop 显示的是 IP+端口对的实时吞吐,类似 top 之于 CPU,但它默认反向解析所有 IP 为域名。一旦本地 DNS 不通或响应慢,界面就卡在 Resolving...,甚至假死。
- 必须加
-n:关闭 DNS 解析,避免卡顿和unknown host错误 - 必须指定网卡:用
-i eth0(替换成你的真实接口名,如ens33),否则可能监听错设备(尤其多网卡服务器) - 单位别混淆:默认显示 bit/s,加
-B才是 Byte/s;-P显示端口号,-N禁服务名转换(比如不把 80 显示成 “http”) - 过滤特定端口:比如只看 HTTP/HTTPS 流量,用
sudo iftop -n -i eth0 -f "port 80 or port 443"
nethogs 定位耗带宽进程,但容器里基本失效
nethogs 是唯一能直接告诉你 python3 或 curl 进程占了多少带宽的工具,输出带 PID 和命令名,不用再手动关联 socket。
- 依赖
libpcap:最小化系统或某些容器环境缺这个库,报Unable to create a socket就得先装libpcap-dev(Debian)或libpcap-devel(RHEL) - 只显示活跃连接:刚启动但还没发包的进程不会出现
- 不支持容器内监控:在 Docker/Podman 容器里运行常失败,因为无法访问宿主机网络命名空间
- 排序有用:加
-s按发送速率排序,-t进入文本模式便于重定向或脚本解析
nload 看吞吐趋势,但单位容易误读
nload 不抓包,直接读 /proc/net/dev,所以资源占用低、响应快,适合快速扫一眼是否跑满或突发尖峰。
- 默认单位是 bit/s:看到 “12.45” 是 12.45 Mbit/s,不是 MB/s;加
-u M可强制显示为 MByte/s,但注意换算逻辑(1 MB/s = 8 Mbit/s) - 不显示连接细节:只有 RX/TX 两条曲线 + 当前/最小/最大速率 + 总流量,没法知道是谁在连谁
- 多网卡切换:用
nload -m同时监控所有接口,左右方向键切视图 - 刷新间隔可调:
nload -t 2000设为 2 秒一次,避免太频繁刷屏
历史流量必须提前部署 vnstat,否则此刻无法补救
iftop、nethogs、nload 全都不存历史数据。你想查“昨天下午三点到四点 eth0 流了多少”,现在装 vnstat 已经晚了——它只从初始化数据库那一刻起开始采样。
- 初始化是硬门槛:必须先运行
sudo vnstat -u -i eth0创建数据库,再启服务:sudo systemctl enable vnstat && sudo systemctl start vnstat - 采样机制固定:每 5 分钟读一次
/proc/net/dev,重启不丢数据,但依赖 cron 或 systemd timer - 查数据很简单:当天流量用
vnstat -d,小时级用vnstat -h,但没初始化之前所有输出都是空或报错 - 别指望临时补救:等出问题才想起来装,过去的数据永远没了——这点最容易被忽略











