PHP GearmanClient :: doBackground просто зависает - PullRequest
0 голосов
/ 15 мая 2019

Mehod doBackground из GearmanClient и его потомков, таких как doLowBackground и doHighBackground, иногда зависают. Я не могу понять, почему.

php 5.4

Сервер Gearman версия 1.1.18

Gearman php lib версия 1.1.2

В какой-то момент пользователь нажимает кнопку, и задания (более 700) переходят к механизму. 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

и

libgearman для php был автоматически установлен с yum

. Кажется, есть та же проблема, но !!! это появляется очень очень редко.

Конечно, это критическая и очень важная проблема, если вы наберете счетчик А, а счетчик Б перейдет в очередь.

P.S .: Причина различных условий заключается в том, что мы все еще не можем перейти на php7. Php5.4 - это prod, а php7 - это dev

1 Ответ

0 голосов
/ 30 мая 2019

Это не проблема редуктора и не проблема расширения php

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

...