直接看实时带宽占用,iftop和nload最快速生效;定位刷流量进程必须用nethogs;纯看数字可用watch -n 1 'cat /proc/net/dev'。

直接看实时带宽占用,iftop 和 nload 是最快速生效的两个工具;想定位哪个进程在刷流量,必须用 nethogs;纯看数字不想要界面,就用 watch -n 1 'cat /proc/net/dev'。
iftop 看连接级实时流量(谁连了谁、多少速)
它显示的是「源IP:端口 → 目标IP:端口」粒度的实时速率,适合一眼揪出异常外联或高频请求来源。默认会做 DNS 反解,卡顿或显示 unknown host 就是这个原因。
- 基础命令:
sudo iftop -n -P -N(-n关DNS,-P显端口,-N不把 443 转成 https) - 指定网卡更准:
sudo iftop -n -P -N -i eth0,别漏-i,否则可能监控到lo或错误接口 - 过滤 HTTP/HTTPS:
sudo iftop -n -P -N -f "port 80 or port 443",注意语法是 libpcap 过滤器,不支持域名或正则 - 常见误判:所有连接都显示
127.0.0.1→ 检查是否误选了lo;大量*.*.*.*→ 肯定没加-n
nethogs 定位耗带宽的进程(哪个程序在发包)
nethogs 是唯一按进程(PID + 命令名)聚合流量的终端工具,不是连接维度,所以不会因为一个进程建了 100 个连接就刷出 100 行。但它对多线程程序(如 Chrome、Java 应用)只显示主线程名,且无法监控容器内进程。
- 必须指定网卡:
sudo nethogs eth0,不指定容易混杂抓包,数据失真 - 文本模式防报错:
sudo nethogs -t eth0,解决Unable to open /dev/tty类终端兼容问题 - 按上传排序(找发包大户):
sudo nethogs -s eth0 - 首次运行报
Unable to get pid of process→ 大概率是 SELinux 或 cgroups v2 限制,临时禁用 SELinux 测试或换用ss + lsof组合兜底
nload 和 watch + /proc/net/dev:零依赖或极简场景
nload 不分析连接也不管进程,只画两条曲线:RX(接收)和 TX(发送),单位清晰、刷新快、资源占用低,适合值班时扫一眼总带宽是否打满。watch + /proc/net/dev 则完全无依赖,但输出是字节累计值,需手动算差值再除以时间才能得 bps。
-
nload eth0即可启动,左右方向键切换网卡,-m同时监控所有可用接口 - 算实时速率:
watch -n 1 'cat /proc/net/dev | awk '\''/eth0/{print \"RX:\", $2/1024/1024 \" MB/s\", \"TX:\", $10/1024/1024 \" MB/s\"}'\''(注意字段位置随内核版本微调,eth0行第 2 列是接收字节数,第 10 列是发送字节数) -
/proc/net/dev的数值是自启动以来的累计值,重启后归零;若系统 uptime 很长,小数点后精度会丢失,不适合测毫秒级抖动
真正难的不是选哪个命令,而是别让 iftop 监控 lo、别让 nethogs 在没权限时只显示一半进程、也别把 vnstat -u 初始化写错网卡名——这些细节一错,后面所有数据都不可信。











