标准答案

  1. 检查网关超时、上游连接、worker 存活和请求排队。
  2. 异步服务看 event loop lag、Task、同步调用和线程池;同步服务看线程/进程、锁和连接池。
  3. 关联数据库、HTTP、缓存和消息下游的延迟、限流和重试。
  4. 修复前先限流或降级,修复后验证错误率、P99、资源基线和业务结果。

题目解析

502 通常表示代理没有得到有效的上游响应,504 更常见于代理等待上游超时,但具体含义仍取决于网关实现。排查必须把网关访问日志、上游连接错误、Python worker 状态和请求 ID 对齐,不能只根据状态码猜应用根因。

ASGI 服务重点看 event loop lag、阻塞调用、Task 和线程池;同步服务重点看进程、线程、锁和连接池。两者都要关联数据库、缓存和 HTTP 下游的延迟、限流、连接错误和重试次数。CPU 不高也可能是在等待连接或锁,CPU 很高则可能是计算热点、序列化或异常重试。

止血可以是限流、降级、隔离慢依赖、暂停重试或回滚,而不是一律增大 timeout。修复后要验证错误率、P99、队列等待和下游负载,同时确认写请求没有因为超时重试产生重复副作用。

常见误区

  • 误区:只调大网关 timeout。改正:先确认是连接失败、worker 阻塞、下游慢还是网关预算不一致,再调整对应层。
  • 误区:只看 Python 应用日志。改正:用 request ID 关联网关、worker、连接池和下游指标。
  • 误区:所有超时请求都自动重试。改正:按方法、错误类型和幂等键判断,并设置整个调用链的总 deadline。

作者信息