Timer被系统清理掉了

秀才

1月31日上午8:54分在start_gateway.php中启动的Timer,两秒触发一次,在第二天(上午0:33)的时候Timer不再触发函数了。

[attach]240[/attach]

请问Gateway是否有崩溃日志,Timer停止是因为系统回收了还是代码崩溃了或者是Timer是有最大计数的?

3338 4 0
4个回答

walkor

Timer不会自己消失,更不会被系统回收,这种问题绝大多数是业务问题,或者是开发者判断失误。

请仔细检查自己的业务逻辑是否有问题,比如$openids是否可能为空,file_get_contents($callback)有可能一直阻塞不返回导致定时器卡主。如果$value='/tmp/queue/',exec("rm -rf /tmp/queue/") 会删掉queue目录的,foreach永远将不会进入,也就没有日志。

php start.php status 可以看到各个进程运行情况,包括gateway运行情况。

最后建议在Timer函数第一行就记录个日志,看下是否有进入定时逻辑。如果发现定时器没有运行,可以利用strace lsof两个命令排查下进程卡在哪里,比如卡在url请求上

  • 暂无评论
秀才

多谢,我将排查一下这部分代码,解决后会将解决方法贴上来。

  • 暂无评论
walkor

好的,感谢

  • 暂无评论
秀才

数据不再放在文件里,改为放在redis里,还可以做负载均衡。问题就这么解决了。

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