描述一下问题:
supervisor 起了几百个消费进程都是 php artisan queue:work --queue=每个不一样
理论上,发送 TERM 信号给 supervisor ,它会挨个发送给每个进程,然后 laravel 本身也处理了 term 信号,会在当前正在处理的 job 处理完后自动退出进程,并且 exitcode 是 0
但是经过实际测试,给 supervisor 进程发送 TERM 信号后,的确所有进程都陆续退出了,但是,唯独有那十几个进程,每次都是在其他所有进程结束后都又过了十几秒才开始陆续退出。
在 vendor/laravel/framework/src/illuminate/queue/worker.php 给信号处理、标记退出 flag 、while popjob 等几处,挨个打了个日志。
根据日志结果,也确实证明这十几个进程确实是压根儿没收到 term 信号,在其他进程都退出完成后的十几秒后,才收到了来自 supervisor 的 term 信号。
没啥排查思路了...
(所有 program section 都有 stopasgroup)
1
julyclyde 173 天前
pstree 看看
应该不是直属层的 |
2
vacker 173 天前
不都是用 horizon 然后只开一个进程了么
|