带宽占用过高时需分三步排查:先用nload查网卡总吞吐,再用iftop -n -N定位高流量IP端口对,最后追踪具体进程;nload读/proc/net/dev零开销,iftop需sudo权限且禁DNS解析以保效率。

带宽占用过高时,不能只盯着“总流量大”,得一层层往下查:先看网卡整体吞吐,再锁定是哪些连接在发包,最后落到具体进程和流向。整个过程要快、准、不干扰业务。
第一步:快速摸清网卡总吞吐
用 nload 看实时进出速率,它读取 /proc/net/dev,零抓包、低开销,适合第一时间判断是否真跑满。
- 运行
nload eth0(把eth0换成你实际网卡名,如ens33) - 按 左右方向键 切换接口;按
u键可切单位,推荐nload -u M eth0显示 Mbps,更符合带宽认知 - 注意:顶部显示的 “Tot” 是当前总带宽,不是峰值;单位是兆比特(Mb),不是兆字节(MB)——100 Mbps ≈ 12.5 MB/s
第二步:找出高流量的 IP 和端口对
如果 nload 显示异常,就用 iftop 查连接级明细。它能告诉你“谁连谁、走什么端口、每秒收发多少”。
- 必须加
-n(禁 DNS 解析)和-N(显数字端口):运行sudo iftop -n -N -i eth0 - TX/RX 列单位默认是 KB/s 或 MB/s;
=>表示本机发出,表示本机接收 - 按
l键可输入 IP 或网段过滤,比如192.168.1.100或10.0.0.0/24,缩小排查范围 - 看到可疑 IP 别急着封,先确认是不是健康检查、CDN 回源或合法爬虫
第三步:精准归因到具体进程
iftop 只能看到连接,不知道哪个程序在跑。这时必须上 nethogs,它直接关联 PID 和命令名。
- 运行
sudo nethogs eth0,界面列出每个进程的 Sent/Recv 速率和累计流量 - 按
s按发送排序,按r按接收排序,一眼找到“吃带宽大户” - 按
m切换单位,默认 KB/s 最灵敏;Java 类进程常统一显示为java,需配合ps aux --forest | grep [PID]查启动参数 - 如果界面空白,可能是容器环境或 systemd socket 激活服务未被识别,需检查网络命名空间是否隔离
第四步:确认流量去向与历史趋势
单次监控只能看“此刻”,但问题往往有周期性。想查“昨天三点是不是也飙高”,就得靠 vnstat。
- 它不抓包,只轮询内核计数器,重启不丢数据,但必须提前部署:装好后先执行
sudo vnstat -u -i eth0初始化数据库 - 查今日汇总:
vnstat -d;查小时级明细:vnstat -h;查实时近似值:vnstat -l(其实是最近 2 分钟平均) - 没提前装,就看不到过去的数据——这点最容易被忽略,等出问题才想起来装,已经晚了


















