V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
dzdh
V2EX  ›  PHP

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

  •  
  •   dzdh · 7 天前 · 511 次点击

    描述一下问题:

    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)

    2 条回复    2024-06-22 21:01:28 +08:00
    julyclyde
        1
    julyclyde  
       6 天前
    pstree 看看
    应该不是直属层的
    vacker
        2
    vacker  
       6 天前
    不都是用 horizon 然后只开一个进程了么
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2096 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 01:00 · PVG 09:00 · LAX 18:00 · JFK 21:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.