对于长时间运行的 PHP 程序,各位大佬是如何预防程序假死挂起的呢? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
echo404
V2EX    PHP

对于长时间运行的 PHP 程序,各位大佬是如何预防程序假死挂起的呢?

  •  
  •   echo404 2018-11-14 17:42:11 +08:00 6618 次点击
    这是一个创建于 2610 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如题,各位大佬有没有什么好的方式去监控假死的程序呢?

    第 1 条附言    2018-11-14 18:25:44 +08:00
    具体的业务是这样的:一个 PHP 程序监听一个队列,从队列中取出消息,转发到另外的几条队列中。如果这个程序假死了,会导致主队列消息挤压,影响业务处理。
    目前我们定的方式是每出转发一次消息,就往一个固定文件中写入时间戳,然后写个定时任务去读取这个文件内的时间,如果时间超过 5 分钟没有更新就重启进程。
    来这就是想问问各位大佬有没有什么更加合适的解决方案
    20 条回复    2018-11-29 22:04:59 +08:00
    askfilm
        1
    askfilm  
       2018-11-14 17:48:36 +08:00
    定时重启
    OMGZui
        2
    OMGZui  
       2018-11-14 17:52:37 +08:00
    定时重启+supervisor 监控
    echo404
        3
    echo404  
    OP
       2018-11-14 17:54:39 +08:00
    @askfilm 如果在定时重启之前,进程就假死掉了,那么在重启之前,业务岂不是都堵塞在那了
    echo404
        4
    echo404  
    OP
       2018-11-14 17:57:03 +08:00
    @OMGZui supervisor 不是监控进程异常退出么?对于那种假死挂起的进程也能监控出来么?
    cloverstd
        5
    cloverstd  
       2018-11-14 17:58:30 +08:00
    健康检查
    echo404
        6
    echo404  
    OP
       2018-11-14 18:03:47 +08:00
    @cloverstd 怎么健康检查,萌新不是很懂
    skymei
        7
    skymei  
       2018-11-14 18:28:29 +08:00
    如果这种持续运行的消费者,生产者模式,我觉得还是搞清楚为什么假死比较好..,监控手段肯定有一点延迟
    Exceptions
        8
    Exceptions  
       2018-11-14 18:32:47 +08:00
    可以做个心跳包
    x66
        9
    x66  
       2018-11-14 18:37:01 +08:00 via iPhone
    多部署几份,如果全挂了就找原因吧。
    anyele
        10
    anyele  
       2018-11-14 18:44:45 +08:00 via Android
    先找为什么会死
    via
        11
    via  
       2018-11-14 18:53:19 +08:00 via iPhone
    楼主可以参考一下 laravel 的 shedule,或者使用 supervisor 等 pm 工具
    lujiajing1126
        12
    lujiajing1126  
       2018-11-14 19:05:26 +08:00
    为什么不是找到假死的原因
    zakokun
        13
    zakokun  
       2018-11-14 19:06:52 +08:00
    不可能莫名其妙就 i 假死的,要确认具体原因
    pandanrain
        14
    pandanrain  
       2018-11-14 20:31:12 +08:00
    visonme
        15
    visonme  
       2018-11-14 20:39:07 +08:00
    前面都提到了,定时重启,健康检查(模拟网络通信中心跳包方式来处理)
    但是最好的方式还是先假设下可能假死的原因,然后针对各种原因去做方案吧
    0xff0x77
        16
    0xff0x77  
       2018-11-14 21:10:42 +08:00
    一般一个程序,是不可能无缘无故假死的,楼主可能是 windows 程序用多了,得到了假死这个概念。
    假死一定要找到原因,如果是内存溢出,不会找调用栈的话,考虑定时重启,当然治标不治本。
    Joyboo
        17
    Joyboo  
       2018-11-15 10:37:51 +08:00
    我们目前是运维做了一个监控警报,监控那几个进程,挂掉了就电话邮件微信报警,然后每天凌晨定时重启
    geligaoli
        18
    geligaoli  
       2018-11-15 10:53:55 +08:00
    php 长期运行,几乎肯定会死的。我都是每次运行玩一批任务就退出,在 shell 脚本中循环调用。
    qianbi6
        19
    qianbi6  
       2018-11-15 11:49:38 +08:00 via Android
    @geligaoli php 用 swoole 写的一个队列一年都没挂啊
    mingyun
        20
    mingyun  
       2018-11-29 22:04:59 +08:00
    @qianbi6 swoole 这么 6
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3797 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 10:24 PVG 18:24 LAX 02:24 JFK 05:24
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86