yii PHP GearmanClient::doBackground只是挂起

soat7uwm  于 2022-11-09  发布在  PHP
关注(0)|答案(2)|浏览(120)

Mehod doBackground of GearmanClient及其后代如doLowBackground和doHighBackground有时会挂起,我想不出原因。
php 5.4版
Gearman服务器版本1.1.18
Gearman php库版本1.1.2
在某个时间点上,用户点击按钮,任务(超过700个)就会转到gearman。DoBackground会随机冻结,它可以在20个任务进入gearman后挂起,也可以在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

libgearman for php是用yum自动安装的
。似乎也有同样的问题,但是!!!它出现得非常非常少。
当然,这是一个非常关键的问题,如果你发出A计数和B计数进入队列。
附言:不同环境的原因是我们仍然不能移植到php7。Php5.4是prod,php7是dev

hmmo2u0o

hmmo2u0o2#

客户端初始化应该在循环外进行。我遇到了同样的问题。当你在循环内初始化时,内存会耗尽。希望这对你有帮助!
https://stackoverflow.com/a/54442341/4932684

相关问题