← 中文资源

简体中文版本

Gunicorn 报 WORKER TIMEOUT 并杀掉工作进程

通过定位阻塞式请求处理器并按需调整 timeout 与 worker 类型,诊断 Gunicorn 的工作进程超时。

阅读英文原文

症状

Gunicorn 日志出现 [CRITICAL] WORKER TIMEOUT 并在客户端等待时杀掉工作进程,常返回 502 或 504。负载下 worker 可能反复重启,整体延迟因排队而在阻塞的 worker 之后上升。本地数据量与网络延迟较低时代码可能看起来正常。

诊断

在日志中定位超时的请求路径;临时调低 –timeout 以确定性复现;再切换 worker 类型或线程数,判断是阻塞等待还是真正的长计算。

grep -n "WORKER TIMEOUT" gunicorn.log | tail

根因

某个 worker 在超时内未回报,原因是处理器被阻塞,通常卡在同步 I/O 或无响应的依赖上,于是 Gunicorn 杀掉并替换了它。

修复

让处理器在超时预算内完成:为数据库与 HTTP 调用设置超时,把重活移到队列,避免在异步处理器中阻塞。再按工作负载选择 worker 类型与数量,而不是仅抬高 timeout 而只是推迟失败。

验证

重跑负载,确认不再出现 WORKER TIMEOUT、响应时间低于上限、worker 不再反复重启;对处理器耗时做度量有助于确认修复而非掩盖问题。

常见陷阱

盲目提高 timeout 会让慢请求拖垮吞吐并掩盖真正阻塞的调用;应优先缩短处理时间。