标准答案
- 检查网关超时、上游连接、worker 存活和请求排队。
- 异步服务看 event loop lag、Task、同步调用和线程池;同步服务看线程/进程、锁和连接池。
- 关联数据库、HTTP、缓存和消息下游的延迟、限流和重试。
- 修复前先限流或降级,修复后验证错误率、P99、资源基线和业务结果。
题目解析
502 通常表示代理没有得到有效的上游响应,504 更常见于代理等待上游超时,但具体含义仍取决于网关实现。排查必须把网关访问日志、上游连接错误、Python worker 状态和请求 ID 对齐,不能只根据状态码猜应用根因。
ASGI 服务重点看 event loop lag、阻塞调用、Task 和线程池;同步服务重点看进程、线程、锁和连接池。两者都要关联数据库、缓存和 HTTP 下游的延迟、限流、连接错误和重试次数。CPU 不高也可能是在等待连接或锁,CPU 很高则可能是计算热点、序列化或异常重试。
止血可以是限流、降级、隔离慢依赖、暂停重试或回滚,而不是一律增大 timeout。修复后要验证错误率、P99、队列等待和下游负载,同时确认写请求没有因为超时重试产生重复副作用。
常见误区
- 误区:只调大网关 timeout。改正:先确认是连接失败、worker 阻塞、下游慢还是网关预算不一致,再调整对应层。
- 误区:只看 Python 应用日志。改正:用 request ID 关联网关、worker、连接池和下游指标。
- 误区:所有超时请求都自动重试。改正:按方法、错误类型和幂等键判断,并设置整个调用链的总 deadline。