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