Laravel перестали работать очереди

Рейтинг: 0Ответов: 1Опубликовано: 02.03.2023

я разрабатываю игру про майнинг на laravel, в ней каждую минуту выполняется тяжелый алгоритм, который считает параметры комплектующих и ригов у игроков. Он выполняется в среднем 14 секунд для 1600 комплектующих)

Полгода всё работало исправно. Но вчера ни с того, ни с сего вдруг скрипт просто перестал запускаться

P.s скрипт запускается каждую минуту через джоб, который прописан в larave schedule (на shared хостинге php artisan schedule:run выполняется также каждую минуту). Он состоит из 3 частей - получение данных из ДБ, их обработка и сохранение изменений в БД.

Помогает полный сброс кэша php artisan optimaze:clear. Но после этого скрипт выполняется всего один раз и перестает работать. На сервере ничего не меняли, я код не менял - всё чисто.

Ошибки

ОШИБОК НЕТ! Логи пустые, НО

Пару раз ловил ошибку Too many attempts or too long - MiningRunJob ... Но алгоритм всегда выполняется до 20 секунд уж точно, а ограничение в 60 секунд. Тем более я его даже явно прописывал, когда запускаю queue:work --timeout=60.

В job'e вначале и в конце есть вызов Log. Так вот, они оба всегда выводились в логи, но сейчас даже первый лог не выводится. Приэтом, если прописать логирование в Kernel.php, где прописываются расписания scheduler'a, то они исправно отрабатывают каждую минуту. P.s. jobs и failed_jobs в бд чистил

Иногда почему-то выскакивает ошибка could not find driver (SQL: select ... FROM ...). НО ПОЧЕМУ?? БД с сайтом нормально работает, даже после этого сбоя. До этого всё было ок, конфиги не менял.

Господи, что это может быть?

Вынес запуск алгоритма из джоба Хз, как это может повлиять на работу сайта, если выполнять его не в джобе.

Что ж, оно на первый взгляд работает, алгоритм отрабатывает. НО: треть вызовов алгоритма тупо пропускается. Я хз, какого черта это происходит, догадок O. Конкретнее: в логах я вижу такую картину

start
end
start
start
start
end
start
start

И ошибок нет! На хостинге в тех.поддержке говорят, что с их стороны всё чисто, ограничений нет.

Я даже переписал немного код и разделил получение данных из БД на чанки по 200 запсей - не помогло

Вы - моя надежда

Ответы

▲ 0Принят

Проблема заключалась в том, что воркеры постоянно запускались, но никогда не завершались. Из-за этого и были лаги. Переписал команду запуска воркера с параметром stop-when-enpty

php artisan queue:work --stop-when-empty