使用web-msg-sender的时候每次运行之后的第二天过来就会busy,按照手册中的调试方法定位不到问题

梦幻星图

截图
目前就卡到这个地方走不动了,不知道怎么调试了,为什么会出现这种问题

779 2 0
2个回答

walkor

看起来是进程一直在等待锁释放。看下业务有没有锁的操作,那里可能死锁了

  • 梦幻星图 2022-06-02

    业务里边做的都是数据库的查询操作,按说应该不会锁吧,现在的代码就是在示例代码的框架上添加的,就是推送消息的时候查询一下数据库数据,每次数据库查询之后,就会把数据库链接给关闭了,使用的是tp框架

  • 梦幻星图 2022-06-02

    前几天有运行两天出问题的,这几次出问题,大部分都是运行到第二天就出问题了,会不会是内存问题

  • walkor 2022-06-02

    从strace看阻塞在 futex,等待某个锁的释放。不是内存影响

  • 梦幻星图 2022-06-02

    业务有没有锁的操作,一般从哪方面去排查呢,这个不是很懂,大佬能不能给点方向建议

  • walkor 2022-06-02

    重启web-msg-sender,运行status查看进程pid,运行命令
    nohup strace -ttp $进程pid -o /tmp/strace.log &
    等待下一次busy,这样进程从正常状态到竞争futex之间的系统调用会被记录下来,到时候看下futex之前有哪些调用大概就能判断出来哪里有问题了。

  • tanhongbin 2022-06-02

    老大,你说的我都不理解呀,o(╥﹏╥)o

  • walkor 2022-06-02

    @梦幻星图
    用这个命令 nohup strace -s 500 -ttp $进程pid -o /tmp/strace.log &

  • 梦幻星图 2022-06-02

    如果说我把所有的业务调用都放到推送逻辑外边,worder只负责推送文本内容,这样的是不是可以避免出现这种busy的情况

  • 梦幻星图 2022-06-02

    如果可行的话,我就把业务逻辑给分离出来,在推送之前就把要推送的数据给处理好再推送

  • walkor 2022-06-02

    对,web-msg-sender 只做推送,其它逻辑在mvc框架里做比较合理

  • 梦幻星图 2022-06-02

    好的,谢谢大佬

蚂蚁搬家

推送不建议做堵塞动作

  • 暂无评论
年代过于久远,无法发表回答
🔝