服务器带宽跑满iftop/nload快速定位占用IP进程
服务器带宽跑满时,网站会变卡、接口超时,甚至被服务商限速。
解决这个问题的关键是快速找出是哪个 IP 在占流量、由哪个进程产生。iftop 和 nload 是两款轻量级实时流量监控工具,能帮你在几分钟内锁定目标。
本文按零基础可操作的方式,从安装到验证完整走一遍。
先把工具装上:nload 和 iftop 的安装命令
大多数 Linux 发行版都内置了这两个工具的软件源,直接安装即可。
CentOS / Rocky / Alibaba Cloud Linux 使用 yum:
yum install -y epel-release
yum install -y nload iftop
Ubuntu / Debian 使用 apt:
apt update
apt install -y nload iftop
安装完成后,先运行 nload 看整体带宽占用情况。
nload 会实时显示进站、出站流量,默认单位是 Mbit/s,按方向键可以切到下一个网卡。
看到整体带宽确实很高后,再用 iftop 深入定位具体 IP。
用 iftop 找出占用带宽的 IP 和端口
iftop 会按连接列出实时的上传下载速度,默认排序是流量从大到小。
直接运行:
iftop
界面顶部显示当前总带宽,中间每一行代表一个连接,左侧是源 IP 和端口,右侧是目标 IP 和端口,后面两列分别对应 2 秒、10 秒、40 秒内的平均速率。
常用交互参数:
- 按
T切换是否显示总流量 - 按
P暂停/继续刷新 - 按
t切换成一行只显示一个 IP - 按
n关闭端口解析,让显示更简洁 - 按
q退出
如果只想看指定网卡,用 -i 指定:
iftop -i eth0
如果服务器在 IDC 机房里,外网流量通常走 eth0 或 bond0,不确定就先用 ip addr 查一下。
从 IP 到进程:用 ss 和 lsof 锁定真凶
iftop 只能看到 IP 和端口,看不到进程名。
要找到具体是哪个程序在跑流量,需要把二者结合。
先把 iftop 里最耗流量的那一行 IP 和端口记下来,比如 203.0.113.10:443。
然后用 ss 查找对应连接:
ss -tnp | grep 203.0.113.10
输出的最后一列会显示进程名和 PID,例如 users:(("nginx",pid=1234))。
如果端口是已知服务,比如 443 是 HTTPS,那就要进一步检查是不是受到了攻击或爬虫。
如果 ss 看不到进程,可能是权限不足,需要加 sudo:
sudo ss -tnp | grep 203.0.113.10
更直接的方式是用 lsof:
sudo lsof -i @203.0.113.10
这样能一次性列出该 IP 对应的所有进程和文件描述符。
确认进程后,再根据业务判断是正常流量还是异常占用。
别忽略的避坑细节
排查过程中有几个容易翻车的地方,提前留意能省很多时间。
iftop 默认显示的是应用层流量还是总流量? 它显示的是经过网卡的数据包速率,包含 TCP 头等开销,明显高于实际应用流量属正常现象。
带宽跑满不一定是单 IP 的问题。 大量小连接也可能是 DDoS 或爬虫造成的,此时 iftop 里会看到很多不同的 IP 各占一点。
可以先按流量排序,再用 ss -s 看整体连接数是否异常偏高。
注意过滤国内流量和 CDN IP。 如果业务本身使用了 CDN,大量回源 IP 是正常的。
可以在 iftop 里按 F 设置过滤条件,或者加上 -f 参数,例如只看某个端口:
iftop -f "port 80"
不要只盯入站流量。 出站流量跑满同样会导致带宽打满,比如服务器被入侵后对外发包。
nload 界面上 Incoming 和 Outgoing 是分开显示的,两个都要看。
验证是否已恢复正常
定位并处理掉异常进程后,比如停掉恶意进程、封禁攻击 IP 或限速爬虫,需要确认带宽确实降下来了。
重新运行 nload,观察几秒钟,看总速率是否回落到正常范围:
nload
也可以在服务器上用 ping 测试外网延迟,或者直接访问网站看是否恢复流畅。
如果是被攻击,建议在防火墙层面临时封禁来源 IP:
iptables -A INPUT -s 203.0.113.10 -j DROP
最后用 iftop 再看一眼,确认占流量的那个连接已经消失,说明带宽问题已解决。
如果你遇到的带宽跑满问题反复出现,优先检查是不是业务代码里出现了死循环下载、日志同步异常,或者服务器被安装了挖矿程序。
把这些排查步骤做成一个固定流程,下次再出问题时,几分钟就能定位到位。