请教关于定时器卡死busy的问题。

dwspider

有个后台业务任务使用workerman的定时器运行,30秒运行一次,业务代码只有一行就是使用php的exec调用了一个外部程序,这个程序平均耗时2秒,整体业务最多耗时3秒左右,跑着跑着就卡死了,用strace追踪,卡死在read操作上,好像是在等管道数据没有等到!请问下,这个具体是什么原因造成的呢?现在
 
部分追踪到的数据。

Process 6339 attached
22:27:14.918829 read(8,
 
--------------------------------------
 
php     6339 root    5u  unix 0xffff880236c9f4c0      0t0 174767200 socket
php     6339 root    6u  unix 0xffff880236c9f140      0t0 174767201 socket
php     6339 root    7u  sock                0,6      0t0 174767229 can't identify protocol
php     6339 root    8r  FIFO                0,8      0t0 176760067 pipe
 
2871 1 0
1个回答

walkor

应该是外部程序卡死了

  • dwspider 2018-12-10

    嗯,谢谢,我也是这么觉得,但是业务代码就是简单的查询数据库,然后更新,没有特殊操作,比较困惑,手动执行是没有问题的,还有一个问题困惑了我很久,就是如果外部程序卡死,进程就阻塞在那里了,那定时器还会运行吗?30秒的时候程序卡住了,那下一次的30秒还会到达这里吗?

  • walkor 2018-12-10

    卡住就不会往下执行了

  • dwspider 2018-12-10

    谢谢!

年代过于久远,无法发表回答
🔝