Laravel Horizon v5.30.1:Worker重启策略不符配置问题求助
我使用Laravel 11开发项目,首次配置Laravel Horizon v5.30.1管理队列,针对「default」队列的supervisor配置如下:
'local' => [ 'supervisor-1' => [ 'processes' => 3, 'minProcesses' => 3, 'maxProcesses' => 3, 'balance' => 'simple', 'maxTime' => (15 * 60), // 15 min 'maxJobs' => 10, 'timeout' => (15 * 60), // 15 min ], ],
预期每个worker处理10个任务后终止重建,但实际每个worker仅处理2个任务就停止,且重建间隔不定(20-30秒)。以下是可能的排查和解决方向:
检查任务异常日志
查看storage/logs/laravel.log或Horizon内置日志,确认worker退出前处理的第二个任务是否抛出未捕获异常——未处理的异常会直接终止worker,表现为任务计数提前结束。核对任务级超时设置
排查队列任务类是否定义了$timeout属性,或分发任务时使用了->timeout()方法,这些任务级设置会覆盖Horizon的全局timeout配置。如果任务实际超时远短于15分钟,worker会被强制终止。调整进程平衡策略
当前配置的balance => 'simple'虽搭配min/maxProcesses=3理论上应保持固定worker数,但可尝试切换为balance => 'false'(固定进程数)或balance => 'auto',验证是否因平衡逻辑导致worker异常退出。确认
maxJobs配置未被覆盖
检查.env文件是否存在HORIZON_SUPERVISOR_MAX_JOBS等环境变量,这类变量会优先覆盖配置文件中的maxJobs值。同时在Horizon仪表盘查看worker的实际任务处理计数,确认是否确实仅处理2个任务就退出。排查系统资源限制
使用top/htop监控worker进程的内存、CPU占用,若worker内存占用超过PHP的memory_limit配置(默认128MB),会被自动终止。可尝试调整memory_limit或优化任务代码减少内存消耗。升级Horizon版本
v5.30.1可能存在已知bug,尝试升级到最新的v5.x稳定版本,看是否已修复该异常退出问题。
内容的提问来源于stack exchange,提问作者Fero94

