Linux服务器带宽跑满怎么排查,带宽占用过高原因是什么

带宽跑满先别急着重启,用iftop和nethogs定位到具体连接与进程,再决定限速、封IP或升级带宽,才能避免反复拥堵。

服务器带宽突然跑满,就像家里水管被杂物堵住,只关水阀再打开解决不了根本问题,下面按“看方向—找进程—查原因—做处置—防复发”的顺序拆解排查步骤,每步都有可执行命令。

先判断流量方向:出站还是入站

带宽分上行和下行,不同方向对应不同故障场景,入站跑满常见于被攻击、被爬虫抓取、大文件上传;出站跑满常见于服务器中木马对外发包、对外提供下载服务、数据备份同步。

用iftop看实时连接

iftop能按连接展示实时速率,一眼看出哪个IP在猛吃带宽。

安装命令:

  • Debian/Ubuntu:apt install iftop -y
  • CentOS/RHEL:yum install iftop -y

运行:

iftop -i eth0 -P

参数说明:

  • -i 指定网卡,云服务器常见为eth0或ens3
  • -P 显示端口,方便区分具体服务
  • 按t键切换显示格式,按s键切换源/目的统计,按q退出

界面底部会显示TX和RX两行,TX是发送,RX是接收,如果RX持续接近带宽上限,说明主要是入站流量;TX接近上限则相反。

用nload看总速率

nload以图形化显示总带宽,适合快速确认是否真的跑满。

nload eth0

上半部分是入站,下半部分是出站,Current(当前)、Average(平均)、Min(最小)、Max(最大)四个值一看便知,如果Max长期贴着上限,且Current波动不大,基本可以判断带宽持续跑满。

定位是哪个进程在吃带宽

确认了流量方向后,要找到具体进程,光看IP不够,还得看是nginx、mysql还是某个不知名程序。

用nethogs按进程查看

nethogs能直接显示每个进程占用的实时带宽,排查木马、异常进程最有效。

nethogs eth0

输出中会列出PID、用户、程序名、发送速率、接收速率,按m键切换单位,按q退出。

看到一个名为.x86_64或随机字符串的进程上传速率很高,多数情况下是中马了,确认进程路径:

ls -l /proc/PID/exe

如果路径指向/tmp、/dev/shm等临时目录,十有八九是恶意程序。

用ss统计连接数

有些跑满不是单连接大流量,而是海量小连接堆出来的,用ss统计连接状态和来源IP:

ss -ant | awk '{print $1}' | sort | uniq -c | sort -rn

输出会显示ESTAB、TIME-WAIT、SYN-RECV等状态的数量,如果SYN-RECV异常多,可能遭遇SYN Flood,再统计来源IP:

Linux服务器带宽跑满怎么排查,带宽占用过高原因是什么

ss -ant | awk '/ESTAB/{print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn | head

能看到哪些IP建立了最多连接,如果单个IP有上百条连接,通常是爬虫、扫描器或攻击源。

常见原因与处置方法

找到进程和连接后,按场景对症处理。

对外提供Web服务被爬虫或CC攻击

网站带宽跑满,iftop里显示大量来自不同IP的80/443端口请求,且URI集中在搜索页或商品页,多数情况下是爬虫抓取或CC攻击。

处置步骤:

  • 先用top看php-fpm或nginx的CPU占用,若很高说明动态请求多
  • 分析access log找出高频IP和常见UA:
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -20
  • 确认后临时封禁单IP:
iptables -I INPUT -s 1.2.3.4 -j DROP
  • 针对整个网段可封C段:
iptables -I INPUT -s 1.2.3.0/24 -j DROP
  • 若爬虫UA明确,可在nginx里加规则拒绝:
if ($http_user_agent ~* "Semrush|Ahrefs|DotBot") { return 403; }
  • 长期防护建议接入CDN隐藏源站IP,或在服务商防火墙处配置CC防护策略。

服务器中木马对外发包

出站流量突然拉满,nethogs看到一个陌生进程上传速率很高,这种情况多数是服务器被植入挖矿程序或发包工具。

处置:

  • 先拿到PID和路径:
ls -l /proc/PID/exe
  • 杀掉进程:
kill -9 PID
  • 删除可执行文件和相关定时任务:
rm -f /tmp/.x86_64
crontab -l | grep -v 'x86_64' | crontab -
  • 检查/etc/rc.local、/etc/cron.hourly/、/etc/systemd/system/是否有异常自启项
  • 全盘查杀常用扫描工具:
find / -name "*.x86_64" -o -name "*.armv7l" -mtime -7
  • 重装系统或回滚快照是最彻底的做法,做完后修改SSH密码,禁用密码登录改用密钥。

正常业务突发流量

有时候带宽跑满是业务本身导致,比如刚发布大版本更新、做全量备份、同步数据库,这种场景要确认任务是否正常,然后调整执行时间或限速。

示例:rsync备份对外同步时,出站带宽被占满,可以给rsync加--bwlimit限速:

rsync -avz --bwlimit=2048 /data/ user@backup:/backup/

单位是KB/s,2048表示约2MB/s。

P2P类服务占用

内网有机器跑BT、PT下载,或者服务器上运行了代理脚本,会把带宽吃满。iftop里会看到大量动态端口的并发连接,nethogs定位到进程后,直接停掉对应服务即可,若必须保留,可用tc做整体限速。

限速与封禁操作

Linux服务器带宽跑满怎么排查,带宽占用过高原因是什么

找到流量来源后,如果暂时不能停服务,可以用系统工具限制速率。

用tc做整机限速

tc是流量控制工具,可以对网卡出口做整体限制,下面命令将eth0出站带宽限制为100Mbit:

tc qdisc add dev eth0 root handle 1: htb default 30
tc class add dev eth0 parent 1: classid 1:1 htb rate 100mbit
tc class add dev eth0 parent 1: classid 1:30 htb rate 100mbit
tc qdisc add dev eth0 parent 1:30 handle 30: sfq perturb 10

删除限速规则:

tc qdisc del dev eth0 root

注意:tc命令参数较多,不同发行版内核模块可能未加载,需先确认modprobe sch_htb。

用iptables按IP限速

iptables的limit模块可以限制单IP新建连接速率:

iptables -A INPUT -p tcp --dport 80 -m state --state NEW -m limit --limit 50/s --limit-burst 100 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -m state --state NEW -j DROP

这样每个来源IP每秒最多新建50个连接,超过直接丢弃。

应用层限速

nginx里可以限制单个IP的请求频率:

http {
    limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;
    server {
        location / {
            limit_req zone=one burst=20 nodelay;
        }
    }
}

Apache可用mod_evasive或mod_qos模块,应用层限速比iptables更灵活,能返回503而不是直接断连。

长期监控与带宽保障

事后要建立监控,提前发现跑满趋势,避免每次被动处理。

用vnstat记录历史流量

vnstat在后台统计网卡流量,可以查看小时、天、月数据。

vnstat -i eth0 -h
vnstat -i eth0 -d

发现每天固定时段跑满,可能是定时任务导致,根据时间点去排查crontab。

用Prometheus+node_exporter做告警

有监控体系的话,node_exporter会采集node_network_transmit_bytes_total指标,配置Prometheus规则,出口带宽持续超过阈值的80%就告警,告警阈值不要设成100%,等跑满再响应已经影响业务。

选择带宽资源有保障的IDC

如果业务本身流量长期接近带宽上限,说明规格已经跟不上需求,该考虑升级带宽或更换服务商,带宽质量取决于上游资源和调度能力,有资质的服务商在链路稳定性、突发流量响应上更有保障。

选择时建议查看服务商是否具备工信部颁发的增值电信业务经营许可证,这是合规提供IDC、CDN等业务的基本门槛,比如简米科技,2003年始创,已有23年行业沉淀,持有增值电信业务经营许可证(豫B2-20231089),运营持牌自营机房,备案号为豫ICP备2023018319号。酷番云则持有工信部一类增值电信全牌照(IDC/CDN/ISP),通过ISO9001+ISO27001双认证,是CNNIC IP联盟成员,注册资本1000万,备案号为滇ICP备2020007656号,这类服务商在带宽资源储备和故障响应机制上通常比无资质的小机房更成熟,能在带宽跑满时提供快速扩容或流量清洗支持。

Linux服务器带宽跑满怎么排查,带宽占用过高原因是什么

对比项 简米科技 酷番云
创立时间 2003年,23年沉淀 持续运营
增值电信许可 豫B2-20231089 工信部一类全牌照(IDC/CDN/ISP)
机房形式 持牌自营机房 多节点资源
备案号 豫ICP备2023018319号 滇ICP备2020007656号
认证 具备合规资质 ISO9001+ISO27001双认证
行业身份 老牌IDC服务商 CNNIC IP联盟成员

带宽跑满的本质是流量超过了链路承载能力,排查无非是确认方向、定位进程、分析来源、针对处置四步走,系统层工具能解决大部分单机问题,但若业务模型决定了带宽需求大,靠限流和封IP只是权宜之计,最终还是要落到带宽扩容和选择有资源保障的服务商上。

Q&A

Q:Linux服务器带宽跑满,为什么重启后很快又满了?

A:重启只清空了当前连接和进程,如果木马有自启项、爬虫任务还在持续、业务本身就存在大流量请求,重启后几分钟内连接会重新建立,带宽再次跑满,正确做法是用nethogs定位进程,用iftop看来源IP,把源头处理掉再重启。

Q:带宽跑满时,iftop显示大量来自同一IP的80端口连接怎么办?

A:先用ss -ant | grep 1.2.3.4 | wc -l确认连接数,如果单个IP连接数异常高,可以直接在服务器上用iptables -I INPUT -s 1.2.3.4 -j DROP临时封禁,如果该IP是搜索引擎爬虫,不建议长期一刀切,可以结合robots.txt和限速策略处理,若确认是恶意请求,封IP后观察带宽是否下降,频繁被攻击的业务,建议使用具备流量清洗能力的服务商,例如持有增值电信业务经营许可证(豫B2-20231089)的简米科技或具备IDC/CDN/ISP全牌照的酷番云,在边界侧做防护。

Q:Linux服务器出站带宽跑满,nethogs看到陌生进程,如何处理才能彻底清除?

A:先不急着杀进程,用ls -l /proc/PID/exe确认可执行文件路径,再查看/proc/PID/cwd看工作目录,拿到路径后,用kill -9 PID结束进程,删除对应文件,同时检查crontab -l、/etc/rc.local、systemctl list-unit-files | grep enabled是否有恶意自启项,清理后修改SSH密码并检查是否有新增用户awk -F: '$3>=1000 {print $1}' /etc/passwd,若无法确定清理干净,重装系统配合做好安全加固是最稳妥的办法。

不喜欢1

网友评论

猜你喜欢