ECS 带宽打满(达到 100%)是运维和开发中最头疼的问题之一,因为它直接导致业务响应慢、丢包甚至连接超时。解决这个问题不能只靠“加钱买带宽”,得先搞清楚瓶颈到底在哪,再对症下药。
通常我们把原因分为三类:应用层流量过大、系统/网络配置不当、以及被攻击。以下是按排查优先级整理的解决方案:
一、 快速止血:确认是不是真的“被占满”
在动手改配置前,先用命令看一眼真相。很多时候你以为带宽满了,其实是 CPU 或磁盘 IO 满了,或者是某个进程占用了大量连接数,导致 TCP 重传,看起来像带宽问题。
-
查看实时流量监控
- 登录云厂商控制台(阿里云 ECS 监控、腾讯云 Cloud Monitor 等),看
IntranetOut(内网出)和InternetOut(公网出)。 - 关键点:区分是突发流量还是持续满载。如果是突发,可能是定时任务或备份;如果是持续满载,必须优化。
- 登录云厂商控制台(阿里云 ECS 监控、腾讯云 Cloud Monitor 等),看
-
服务器内部排查
- 使用
iftop、nethogs或bmon查看具体是哪个 IP 或哪个进程在跑流量。 -
# 安装 iftop (CentOS) yum install iftop -y iftop -i eth0 # 指定网卡 - 如果发现是某个异常 IP 高频访问,大概率是被 CC 攻击或爬虫抓取。
- 使用
二、 架构层面:把流量“挡”在外面或“分流”出去
这是最治本的方法。不要让你的 ECS 直接面对所有公网请求。
1. 上 CDN(内容分发网络)
- 适用场景:静态资源(图片、JS、CSS、视频、下载包)。
- 原理:CDN 节点缓存了内容,用户从最近的 CDN 节点获取数据,不经过你的源站 ECS。
- 效果:源站带宽压力减少 80%-90%。
- 注意:记得配置回源策略,避免全站回源导致 CDN 失效。
2. 使用负载均衡 SLB/CLB
- 适用场景:动态 API、Web 服务。
- 原理:SLB 本身有独立的带宽池(或者按量计费),它将流量分发到后端多台 ECS。
- 优势:
- 单台 ECS 的带宽压力被分摊。
- SLB 支持健康检查,自动剔除故障实例。
- 可以开启 SLB 自身的带宽包,比单独给每台 ECS 配高带宽更划算。
3. 动静分离 + OSS 存储
- 适用场景:用户上传文件、大文件下载。
- 操作:
- 上传路径指向对象存储(OSS/COS)。
- 下载链接通过 CDN 提速或直接生成 OSS 预签名 URL。
- ECS 只处理业务逻辑,不碰大文件 IO。
三、 系统与应用优化:榨干每一比特
如果预算有限,无法扩容,那就从代码和系统层面优化传输效率。
1. 开启 Gzip/Brotli 压缩
- 效果:文本类资源(HTML, JSON, CSS, JS)可压缩 60%-80%。
- 操作:
- Nginx/Apache 配置
gzip on;。 - 前端构建工具(Webpack/Vite)开启压缩插件。
- 注意:CPU 占用会略升,但通常远小于带宽节省的价值。
- Nginx/Apache 配置
2. 优化 HTTP 协议
- HTTP/2 多路复用:相比 HTTP/1.1,HTTP/2 解决了队头阻塞问题,能更高效地利用带宽。
- Keep-Alive 长连接:确保 Nginx 和客户端保持长连接,减少 TCP 握手开销。
- ETag / Last-Modified:合理使用缓存头,让用户浏览器缓存静态资源,减少重复请求。
3. 数据库与接口优化
- 减少单次返回数据量:分页查询、字段裁剪(只查需要的列)。
- 批量接口:将多个小请求合并为一个批量接口,减少 HTTP 头部开销。
- 异步处理:非核心链路(如发送通知、日志记录)改为消息队列异步处理,避免同步阻塞占用带宽等待时间。
4. 调整 TCP 参数(高阶)
- 在 Linux 内核中调整
net.ipv4.tcp_window_scaling、tcp_max_syn_backlog等参数,提升高并发下的吞吐能力。 - 注意:这需要熟悉内核调优,盲目修改可能导致不稳定,建议先在测试环境验证。
四、 应对攻击:安全加固
如果排查发现流量来源全是恶意 IP,且行为异常(如高频 POST、扫描端口),那就是遭受了 DDoS 或 CC 攻击。
1. 启用 WAF(Web 应用防火墙)
- 作用:识别并拦截恶意请求,保护后端 ECS。
- 推荐:云厂商自带的 WAF 服务(如阿里云 WAF、腾讯云 WAF),规则库更新快,误报率低。
2. 配置安全组 + IP 黑名单
- 在云控制台的安全组中,封禁可疑 IP 段。
- 使用云盾/安骑士等安全产品自动封禁恶意 IP。
3. 高防 IP(DDoS 防护)
- 如果遭受的是大流量 DDoS(如 SYN Flood、UDP 放大攻击),WAF 不够用,需要购买高防 IP 或 DDoS 原生防护。
- 原理:流量先清洗,干净后再回源到 ECS。
- 成本:较高,仅建议在遭受大规模攻击时启用。
五、 终极方案:扩容与计费模式选择
如果以上都做了,业务确实增长太快,带宽需求超过当前上限,那就只能扩容。
1. 升级带宽规格
- 固定带宽:适合流量稳定、可预测的业务。一次性买断,性价比高。
- 按量付费带宽:适合流量波动大的业务。设置峰值带宽,用多少付多少。
- 技巧:结合 弹性伸缩 AS,在流量高峰时自动增加 ECS 实例数量,分摊带宽压力。
2. 使用共享带宽包(Shared Bandwidth Package)
- 适用场景:一台 ECS 有多个弹性公网 IP(EIP)。
- 优势:多个 EIP 共享一个带宽池,避免单个 EIP 带宽闲置而其他 EIP 爆满的情况,整体利用率更高。
3. 混合云/边缘计算
- 对于极端场景,考虑将部分计算下沉到边缘节点,或使用 Serverless 架构(如阿里云 FC、腾讯云 SCF),由云平台自动管理底层资源,你只需关注代码。
总结:排查流程图
graph TD
A[ECS 带宽 100%] --> B{监控分析}
B -->|突发短时| C[检查定时任务/备份/日志切割]
B -->|持续满载| D{流量来源分析}
D -->|正常用户| E[架构优化: CDN/SLB/OSS]
D -->|恶意/IP异常| F[安全防护: WAF/高防/封禁]
E --> G[应用优化: Gzip/HTTP2/缓存]
G --> H{是否仍不足?}
H -->|是| I[扩容: 升级带宽/增加实例]
H -->|否| J[问题解决]
最后提醒:
- 不要只盯着带宽:有时候带宽满是因为 CPU 软中断过高,或者磁盘 IO 瓶颈导致 TCP 窗口缩小,进而引发拥塞。务必综合监控指标判断。
- 合规性:在国内云平台上,确保你的业务内容合法,避免因违规内容被云厂商限速或封禁,这也会导致“带宽不可用”的假象。
云技术博客