mehod dobackground及其后代有时会悬挂。我不知道为什么。
php 5.4
Gearman Server版本1.1.18
Gearman PHP Lib版本1.1.2
在某个时间点,用户单击按钮,任务(超过700(转到Gearman。Dobackground随机冻结,它可以在完成20个任务后悬挂,或者可以在200-300(也许是500个任务(后悬挂。
我在Gearman/PHP日志中看不到错误,也没有在直接链接中看到(当我直接开始调试时(
当我尝试调试时,我只是将任务数量最小化为50,然后直接向浏览器发出请求。如果一切顺利,浏览器的圆圈(加载动作(消失了,我会看到我的var_dumps。但是,如果在某些任务dobackground没有返回控件,浏览器请求将转到无限循环,等待服务器响应
我的代码很简单。我收集数据,放入数组,然后一一发送到队列
for($i = 0; $i < count($itemsToProcess); $i++) {var_dump($i);
$method = array_shift($itemsToProcess[$i]['methodsAfter']);
Yii::app()->gearman->client()->doBackground($method, json_encode($itemsToProcess[$i]));
}
作为其他信息,我有另一台服务器
php 7.1
安装,
服务器版本为1.1.12
和
使用yum
自动安装了用于PHP的Libgearman
。似乎有同样的问题,但是!!!看起来很少。
当然,如果您发出计数和B计数,这是至关重要且非常关键的问题。
。P.S:不同环境的原因是我们仍然不能迁移到PHP7。php5.4是prod,php7是dev
它不是齿轮,也不是php扩展问题
https://github.com/gearman/gearmand/issues/241
客户端初始化应发生在循环中。我面临同样的问题。当您在循环中启动时,内存会筋疲力尽。希望这对您有帮助!
https://stackoverflow.com/a/54442341/4932684