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