PHP GearmanClient::doBackground 只是挂起

PHP GearmanClient::doBackground just hangs

Mehod doBackground of GearmanClient 及其后代,如 doLowBackground 和 doHighBackground 有时会挂起。我不知道为什么。

php 5.4

Gearman server version 1.1.18

Gearman php lib version 1.1.2

在某个时间点,用户单击按钮,任务(超过 700 个)转到 gearman。 DoBackground随机冻结,它可以在20个任务放入gearman后挂起,也可以在200-300,也许500个任务后挂起。

我在 gearman/php 日志中没有看到错误,也没有在直接 link 中看到错误(当我直接开始调试时)

当我尝试调试时,我只是将任务数减少到 50,并直接从浏览器发出请求。如果一切顺利,浏览器的圆圈(加载动作)会消失,我会看到我的 var_dumps。但是如果在某些任务中doBackground没有return控制,浏览器请求进入无限循环,等待服务器响应

我的代码很简单。我收集数据,放入数组,然后一个一个发送到队列

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

已安装,

server version is 1.1.12

,以及

libgearman for php was auto installed with yum

。似乎有同样的问题,但是!!!它很少出现。

当然这是很关键和非常关键的问题,如果你发出 A 计数而 B 计数进入队列。

P.S:环境不同的原因是我们还是不能迁移到php7。 Php5.4 是产品,php7 是开发

不是 gearmand,也不是 php 扩展问题

https://github.com/gearman/gearmand/issues/241

客户端初始化应该在循环之外进行。我遇到了同样的问题。 当您在循环中启动时,内存会耗尽。希望对您有所帮助!