Файлы Cronjob не закрываются и ЦП загружен на 100%

, я запускал php-файл каждые 10 секунд с помощью cronjob. Пока система работала нормально, прошлой ночью я заметил, что php использует 100% ЦП и приводит к сбою системы.

Когда я проверил с помощью ps aux, я увидел, что мой файл cron обрабатывает десятки файлов cron. Когда я проверял базу данных, для этого даже не было причин. Итак, моя php-страница должна была вернуться пустой и завершиться мгновенно.

У меня есть несколько вопросов:

1-Чем может быть вызван этот сбой в Cron?

2-Когда я создаю систему очередей, например, для codigniter вместо процесса Cron, чем она отличается от cron?

3-Избавлюсь ли я от подобных проблем, если сделаю PHP системой, работающей в фоновом режиме?

Спасибо, заранее

0
задан 11 October 2021 в 14:00
1 ответ
  1. Чем может быть вызван этот сбой в Cron?

Это не проблема cron.

Cron — это очень простой планировщик, который просто запускает новый пакет в указанное вами время/интервал.

Когда по какой-либо причине ваше пакетное задание не может завершиться вовремя до начала следующей итерации, вы заканчиваете с двумя параллельными процессами. Cron ничего не делает, чтобы предотвратить это.

Это действительно зависит от ваших предположений и кода, вызывает ли это немедленную проблему или нет.

Может случиться так, что вторая итерация немедленно создаст некоторую форму взаимоблокировки и остановится на неопределенный срок, через 10 секунд третья итерация остановится из-за тупиковой ситуации, вызванной второй итерацией, и через 10 секунд следующие итерации также немедленно остановятся. И т.д. И т.п. Это может быстро превратиться в снежный ком.

Или это может быть гораздо более медленный процесс,где для каждой отдельной партии время выполнения медленно увеличивается, и вместо того, чтобы останавливать все более и более продолжительные партии, в конечном итоге они выполняются одновременно. Это (в конечном счете)увеличивает нагрузку еще больше, вызывает конкуренцию за ресурсы и приводит к пакетным заданиям, выполнение которых занимает еще больше времени, а также к большему количеству одновременных/параллельных пакетов и нехватке ресурсов.

  1. Когда я создаю систему очередей, например, для codigniter вместо процесса Cron, чем она отличается от cron?

Как вы поняли, cron не является системой очередей. Это всего лишь очень простой планировщик.

Если вы хотите добавить более сложное управление заданиями, вам необходимо его создать. См., например, этот ответ здесь о том, как просто предотвратить одновременный запуск нескольких пакетов cron в вашей спецификации пакета.

В противном случае решением может стать запуск чего-то более сложного, чем простой cron.

  1. Избавлюсь ли я от подобных проблем, если сделаю PHP системой, работающей в фоновом режиме?

Если основной причиной является тот факт, что ваш код дает сбой всякий раз, когда два пакета выполняются одновременно, то меры, направленные на ускорение работы вашего кода, не устранят этот недостаток и не предотвратят его повторение.

0
ответ дан 11 October 2021 в 19:48

Теги

Похожие вопросы