有用 Laravel + supervisor 用队列的么,有碰到过进程多了以后 kill -TERM $pid 不退出的么

189 天前
 dzdh

描述一下问题:

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)

1121 次点击
所在节点    PHP
2 条回复
julyclyde
188 天前
pstree 看看
应该不是直属层的
vacker
188 天前
不都是用 horizon 然后只开一个进程了么

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1051569

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX