服务器带宽跑满排查:从流量定位到进程限速的完整思路
服务器带宽跑满,通常有两种情况:一种是业务量真的涨了,带宽成为瓶颈;
另一种是异常流量,比如被刷接口、被 CC 攻击、木马外连或备份任务占满出口。
先分清是哪一种,后面的处理方向完全不同。
本文按“先看现象、再定位流量、后处理进程”的顺序讲,命令以常见 Linux 发行版(CentOS、Ubuntu、Debian)为准,需要 root 或 sudo 权限。
先确认现象,别急着改配置
登录服务器后,先看网卡实时速率和系统负载:
# 查看网卡累计流量,注意 RX/TX 单位是字节
cat /proc/net/dev
# 每 1 秒刷新一次网卡速率,按 Ctrl+C 退出
sar -n DEV 1
如果 sar 提示没有该命令,CentOS 装 sysstat,Ubuntu/Debian 装 sysstat 包即可。
观察时重点看出口方向(TX)是否持续接近带宽上限,比如 100Mbps 带宽跑满时 TX 大约在 12.5MB/s 左右。
同时用 top 或 uptime 看负载是否同步升高。如果带宽跑满但 CPU 不高,多半是流量型问题;
如果 CPU 也高,可能是被刷了需要计算资源的接口。
定位是哪个进程在发流量
知道“带宽满了”还不够,要找出具体进程。
推荐两个工具配合用:
# 安装 iftop(按连接看流量)
yum install -y iftop # CentOS/阿里云等
apt install -y iftop # Ubuntu/Debian
# 指定出口网卡,常见是 eth0、ens33 或 ens5
iftop -i eth0 -n -P
-n 表示不解析域名,-P 显示端口。
界面里左侧是本机、右侧是对端,按 t 可以切换显示发送/接收流量。
找到流量最大的对端 IP 和端口后,再用 nethogs 定位到进程:
apt install -y nethogs # 或 yum install -y nethogs
nethogs eth0
nethogs 会直接列出每个进程的上下行速率。如果看到陌生进程持续外发大量数据,优先怀疑挖矿木马或数据外传,不要只限速,要立即排查进程来源。
区分正常高峰和异常流量
定位到进程后,判断它是不是你认识的业务:
- 是 Nginx、MySQL、Redis 等已知服务:看访问日志和慢查询,判断是否业务量上涨或接口被刷。
- 是 PHP、Java、Python 应用:结合应用日志看请求量,确认是否有爬虫、CC 或死循环请求。
- 是陌生进程、随机命名的二进制文件:按恶意进程处理,先
ls -l /proc/PID/exe看可执行文件路径,再决定是否kill并清理。
对于 Nginx 站点,可以快速统计来源 IP 的请求量:
# 统计访问日志中请求数最高的前 20 个 IP
awk '{print $1}' /www/wwwlogs/access.log | sort | uniq -c | sort -rn | head -20
宝塔面板用户日志一般在 /www/wwwlogs/ 下,按站点名区分。
如果某个 IP 请求量明显异常,可以先用防火墙临时封禁观察。
临时限速与封禁,先止血再根治
确认是异常流量后,可以先做临时处理,避免服务器彻底失联。
# 封禁单个异常 IP(iptables 示例)
iptables -I INPUT -s 1.2.3.4 -j DROP
# 限制某进程或某用户带宽,可用 tc 做出口限速(示例: eth0 限 10mbit)
tc qdisc add dev eth0 root tbf rate 10mbit burst 32kbit latency 400ms
tc 限速对整块网卡生效,适合紧急降速,但会影响所有流量,用完记得删除规则:tc qdisc del dev eth0 root。
宝塔面板用户可以在“安全”里添加 IP 黑名单,或在 Nginx 配置中限制单 IP 并发连接数。任何封禁和限速操作前,先确认不会误伤自己的管理 IP,否则可能直接把自己挡在门外。
验证是否恢复,并做长期防护
处理完后,回到 iftop 或 sar -n DEV 1 观察 1 到 2 分钟,确认 TX 速率回落到正常区间,网站和 SSH 操作不再卡顿。
长期防护建议做这几件事:
- 对外的 API 和登录接口加频率限制,Nginx 可用
limit_req和limit_conn。 - 定期检查
crontab -l和/etc/cron.d/,避免被植入定时外连任务。 - 给关键服务设置流量告警,云监控或宝塔的监控插件都能配置带宽阈值。
- 备份和同步任务尽量放到低峰时段,避免和业务高峰抢出口带宽。
如果排查后确认是业务增长导致的带宽跑满,单纯限速会伤业务,这时应该考虑升配带宽或把静态资源放到对象存储和 CDN。
常见疑问
带宽跑满但 iftop 看不到大流量怎么办?
可能是短时突发流量,或抓包网卡选错了。先用 ip addr 确认出口网卡名,再用 sar -n DEV 1 看历史速率,必要时用 tcpdump -i eth0 -w capture.pcap 抓包后分析。
限速后网站变慢,怎么恢复?
如果是用 tc 限速,执行 tc qdisc del dev eth0 root 删除规则;如果是 iptables 封禁,用 iptables -D INPUT -s 1.2.3.4 -j DROP 删除对应规则。
怎么判断是攻击还是正常访问?
看请求特征:同一 IP 高频请求、User-Agent 异常、只请求动态接口不加载静态资源、来源地区集中,通常指向攻击或恶意抓取。正常业务流量一般来源分散、页面访问路径完整。
排查服务器带宽跑满,核心是先量化现象,再定位到进程和连接,最后根据是业务增长还是异常流量选择升配、限速或封禁。
每一步都留下验证方式,避免改完不知道有没有生效。