Laravel 队列在生产环境的三种死法与自救:Supervisor、超时与失败任务

本文复盘Laravel队列在生产环境的三类典型故障:Supervisor进程静默存活但无消费能力、retry_after与timeout配置冲突导致重复执行、failed_jobs表堆积且无告警。重点解析超时机制、重试语义、健康监控及幂等设计,并给出可落地的配置策略、告警方案与任务分级实践。

摘要:Laravel 队列本身不难,难的是生产环境里它"看起来活着,实际上死了"的三种经典死法:Supervisor 配置不当的静默死亡、retry_after 与 timeout 配错导致的重复消费、failed_jobs 堆积成库的慢性死亡。这篇基于生产事故复盘,把三种死法的原理、检测方法、自救配置一次讲清,最后给出队列消费的幂等清单。

关键词:Laravel、队列、Supervisor、失败重试、幂等

适合人群:用 Laravel 队列跑生产业务的团队


死法一:Supervisor 的"静默死亡"

事故现场:监控显示队列积压 8000+,但 Supervisor 状态显示 RUNNING,worker 进程也都在——队列"活着",就是不消费。

根因:worker 进程在处理一个卡死的任务(如 curl 一个不回包的外部接口,且没设超时),单个 worker 被无限阻塞;Supervisor 只监控"进程存在",不监控"进程健康",所以它永远显示 RUNNING。其余 worker 一个个被慢任务占满,消费能力归零。

自救配置:

[program:laravel-worker]
command=php /var/www/artisan queue:work redis --sleep=3 --tries=3 \
    --timeout=60 --max-time=3600
process_num=4
autostart=true
autorestart=true
stopwaitsecs=60          ; 必须 > timeout,否则 stop 时 SIGKILL 硬杀
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值