5xx 是什么
5xx 表示服务器承认自己处理失败或无力完成请求:请求本身没有毛病,问题出在服务端或它依赖的上游。这一类错误是幂等请求退避重试的主要目标,也是告警系统最该关注的信号。排查的关键是分清层级:应用内部抛异常、网关连不上上游、上游太慢、容量过载,每种情况的日志位置与处置动作都不同。同一条错误码在不同网关层含义可能不一样,以网关自己的错误日志为准。
基本信息
| 范围 | 以五开头的状态码 |
|---|---|
| 含义 | 错误在服务端或上游、网关侧 |
| 常见码 | 内部错误、未实现、网关错误、服务不可用、网关超时 |
| 是否可重试 | 幂等请求可在退避后重试 |
| 归因依据 | 网关错误日志与应用日志,两者要对照看 |
典型使用场景
- 线上告警:把这一类错误率作为核心可用性指标
- 发布验证:发布后观察该类错误是否上升,快速判断是否回滚
- 容量评估:过载类错误的出现频率是扩容的直接依据
- 依赖治理:区分是自身异常还是上游故障,明确责任方
- 客户端重试策略:只对幂等请求开启自动退避重试
按幂等性重试
按幂等性重试
for i in 1 2 3; do
curl -sf -o /dev/null https://api.example.com/status && break # 成功即退出重试
sleep $((i*2)) # 逐步退避,避免密集重试
done
# 非幂等请求不要放进自动重试循环,除非接口支持幂等键网关类错误对比
| 状态码 | 含义 | 常见根因 |
|---|---|---|
| 网关错误 | 收到无效响应或连不上上游 | 后端进程退出、端口未监听、协议不匹配 |
| 服务不可用 | 过载或维护,应给出重试时间 | 容量不足、主动降级、维护开关 |
| 网关超时 | 上游处理超过时限 | 慢查询、依赖无超时、长任务同步执行 |
| 内部错误 | 应用自身未处理异常 | 代码缺陷、配置错误、依赖故障 |
排查顺序
- 先看网关错误日志判断错误由谁产生,再看应用日志找具体异常
- 对照上游响应时间与请求总耗时,区分是上游慢还是网关侧排队
- 确认是否与发布、扩容、定时任务在时间上重合,变更引入的问题最多
这一类的排查顺序是:应用日志指向自身异常,上游存活与监听指向网关错误,容量指标指向服务不可用,超时配置指向网关超时。顺序错了会在无关的方向上浪费大量时间。
非幂等请求在超时后盲目重试可能造成重复业务,例如重复下单与重复扣款。自动重试必须按请求语义分层配置,不能全局打开。