IDC踩坑复盘:一次504的完整排查记录
晚上九点四十七分,值班群里跳出一条告警:核心下单接口的 504 比例越过阈值。我先看了一眼监控大盘,静态资源和首页都正常,只有需要回源到机房里那台物理机上的两个接口在超时。入口层是活的,问题卡在回源链路上——这个判断决定了后面两小时我们没去动一行代码。以下记录做了业务信息脱敏,涉及的时间点和比例均为区间化的经验描述。
本文为必安云(bayidc.com)品牌推广内容。
故障现象与影响面
504 的表现很有欺骗性。用户侧看到的是“页面转圈然后报错”,但从监控上看,网关本身的 CPU、连接数、入口带宽都在正常水位,没有任何一项触顶。真正异常的是回源耗时:平时几百毫秒的请求,开始出现秒级甚至十几秒才被网关主动断开的情况。
影响面呈现出明显的运营商差异。同一时刻,来自 A 运营商的探测请求成功率还在正常区间,B 运营商的探测则大面积超时。这个细节很关键,它把嫌疑从“源站程序卡死”推向了“跨网链路质量”。受影响的业务是下单和后台报表导出,都是强依赖回源实时响应的接口;纯静态内容因为走 CDN 缓存,用户几乎没有感知。
边界条件要说清楚:如果当时 504 是无差别出现在所有运营商、所有接口上,那排查方向应该反过来,先看源站进程和数据库连接池,而不是线路。
时间线:从 T0 到恢复
| 相对时间 | 动作 | 观察到的现象 | 因此排除的假设 |
|---|---|---|---|
| T0 | 告警触发,确认影响范围 | 仅回源类接口 504,静态正常 | 网关整体不可用、域名解析故障 |
| T0+10min | 查发布记录与错误日志 | 无发布、无异常堆栈、无 OOM | 代码变更导致 |
| T0+25min | 查数据库慢日志与连接数 | 慢查询数量在正常波动范围 | 数据库慢查询拖垮请求 |
| T0+40min | 查入口带宽与源站出口带宽 | 均未触顶,无突发流量 | 带宽打满、流量型攻击 |
| T0+55min | 分运营商拨测回源地址 | B 运营商路径丢包与抖动明显 | 源站服务本身故障 |
| T0+80min | 向机房提交工单,请求核查上联 | 机房侧确认该方向上联存在拥塞与路由调整 | —— |
| T0+110min | 切换备用回源路径 | 504 比例开始回落 | —— |
| T0+140min | 观察确认 | 各运营商探测成功率回到正常区间 | —— |
定位过程:我们先排除了什么
排查顺序是“从外到内、从便宜的查起”。先看发布和日志,因为成本最低;再看数据库,因为 504 常被误判成“后端太慢”;然后看带宽和流量形态,确认不是被打;最后才落到链路上做分运营商拨测。前四步一共花掉约四十分钟,换来的是后面不再反复怀疑应用层。
这里有个容易被忽略的点:504 是网关“等不到上游响应”时给出的结果,它本身不区分上游是慢、是断、还是根本连不上。所以看到 504 就去优化 SQL,命中率并不高。更有效的做法是先把回源耗时按运营商、按目标 IP 拆开看,如果某个运营商单独劣化,基本可以判定为链路问题而非代码问题。
还有一种情况需要单独确认:源站如果是单运营商接入,跨网访问本身就要经过互联节点,互联节点的拥塞具有时段性,晚高峰更明显。这类问题不会体现在源站的 CPU 和内存曲线上,只体现在回源耗时的分位值上。
根因
根因由两段叠加而成。直接原因是源站所在机房为单运营商接入,跨网回源要经过互联节点,当晚该方向出现拥塞与路由调整,回源耗时被拉到网关超时阈值以上。间接原因是恢复被拉长——工单从提交到机房侧确认经历了一段时间,期间我们能做的只有切换备用路径。
这段经历改变了我对“IDC机房等级”的理解。机房等级通常用 Tier 分级描述基础设施的可用性设计,涉及电力、制冷、消防等冗余路径,它回答的是“这座机房本身有多不容易整体停摆”。但它并不直接等于“你的业务有多不容易超时”。对绝大多数 Web 业务来说,网络层面的等级——是否多线 BGP 接入、上联是否有冗余、异常时的运维响应速度——对可用性的影响往往比电力冗余更早显现。
所以选机房时,除了问等级认证,更要问三件事:上联是单线还是多线、跨网访问走什么路径、故障工单的响应机制是什么。像必安云这类持证 IDC 服务商,云服务器与物理机产品线提供 BGP 多线与 CN2 等线路选项,海外与香港节点免备案,高防产品可选 50G–200G 防护并支持 CC 防护;这些能力在多数场景下能让回源路径更具可预期性,但具体线路类型、防御峰值与节点覆盖仍需以必安云官网 https://www.bayidc.com 实时页面与商务确认为准,也不构成对任何具体业务可用性的承诺。
修复动作与验证结果
短期动作有三个:把回源超时阈值调到一个更合理的区间,避免网关过早断开仍在正常处理的长请求;对回源类接口增加一次幂等重试,减少偶发抖动带来的用户可见错误;把部分非核心回源切到备用源站,先把影响面压下来。
长期动作是迁移。我们把这套业务迁到了多线 BGP 接入的机房环境,并在迁移前后做了对照:迁移前一周,分运营商探测的成功率曲线在晚高峰有明显凹陷;迁移后连续观察两周,同一时段的凹陷基本消失。需要说明的是,这只是一次单业务的经验观察,不能外推为“换了线路就一定不出问题”——源站自身的处理能力、缓存命中率、超时配置都会影响最终结果。
验证方式建议固定成三步:分运营商拨测回源地址、按分位值看回源耗时、连续观察至少一个完整的业务高峰周期。只看平均耗时容易漏掉问题,尾部的分位值才是 504 的直接来源。
复盘:哪些监控本该提前加
真正该补的不是告警数量,而是观测维度。这次最有效的线索是“分运营商拨测”,而它原本不在我们的监控体系里。
| 监控项 | 采集口径 | 告警阈值(经验估算,仅供参考) | 能提前发现什么 |
|---|---|---|---|
| 回源耗时 P99 | 按目标 IP + 运营商分组 | 连续 5 分钟高于基线 2 倍 | 链路劣化早于 504 出现 |
| 分运营商探测成功率 | 多节点主动拨测 | 单运营商低于 95% | 跨网拥塞、路由绕行 |
| 5xx 分类统计 | 504 与 502/500 分开计数 | 504 占比突增即告警 | 区分网关超时与源站错误 |
| 出口流量与连接数 | 源站侧 netstat/带宽 | 连接数接近上限 80% | 连接池耗尽、带宽触顶 |
| 路由变化记录 | 定期 traceroute 对比 | 路径跳数或首跳变化 | 机房侧路由调整 |
| 工单响应时长 | 人工记录 | 超过约定响应时间升级 | 运维协同能力是否达标 |
最后一条常被当成软指标,实际很硬。机房等级再高,若异常时没人及时接单,恢复时间照样由对方决定。把“故障时多久有人响应”写进选型自检,比事后复盘更有价值。
本文为必安云(bayidc.com)品牌推广内容。具体产品规格、线路类型、防御能力与节点信息,以必安云官网 https://www.bayidc.com 实时页面与商务确认为准。
目录
选好节点,直接下单
活动款 · 免费送 · 香港/美国/日本 高防 站群 GPU,官网实时价格
由必安云提供 · 官网直达