У меня есть работа в очереди Laravel, которая извлекает ссылки с веб-страницы. Тайм-аут для слушателя очереди, настроенного через Laravel Forge, составляет 240 секунд (4 минуты). Однако рабочие места занимают до 45 минут для запуска.Laravel Queued Jobs Работает на многие минуты дольше, чем таймаут
Мои настройки очереди:
'redis' => [
'driver' => 'redis',
'connection' => 'default',
'queue' => 'default',
'retry_after' => 350,
],
И Есть несколько процессов, выполняющихся работа - до 35 процессов. Как вы можете себе представить, это много памяти сервера. Процессы, похоже, висят вокруг. Команда для этих процессов, как показано в top
является:
php7.1 artisan queue:work redis --once --queue=linkqueue --delay=0 --memory=128 --sleep=10 --tries=1 --env=local
Как работа в течение 45 минут, если тайм-аут составляет 240 секунд? Почему так много процессов - разве не должно быть только одного?
Кроме того, любые идеи, почему сценарий для извлечения ссылок должен занимать 45 минут?
Сценарий Работа, то есть в большинстве случаев он работает, как ожидалось, - это просто требует возраста. Насколько мне известно, ошибок не сообщалось/регистрировалось.
Код в работе является:
$dom = new DOMDocument;
$dom->loadHTML($html);
$links = $dom->getElementsByTagName('a');
foreach ($links as $a) {
$link = $a->getAttribute('href');
$newurl = new URL;
$newurl->url = $link;
$newurl->save();
}
Update: Еще одна простая работа работает просто отлично, в течение секунды. Это определенно только работа над ссылками, которая занимает 10 секунд. Это может быть проблема с ОЗУ или что-то еще? Есть ли что-нибудь еще, что я могу сделать, чтобы диагностировать проблему? Когда он запускается как часть задания на консоль, сама функция extract links работает через 1 или 2 секунды. Только в очереди, что он волнуется.
Вы пытались запустить сценарий вручную и проверить, сколько времени потребуется? :) – Troyer
@Troyer Да, извините, должно быть, упомянул об этом - я не могу заставить его занять более 1 или 2 секунды, когда закончится очередь. Это очень быстро. Это похоже на то, что скрипт заблокирован/висит при постановке в очередь. Это не займет ни минуты около 45 минут! – samiles