Рейтинг:0

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

флаг et

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

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

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

1- Почему может быть вызвана эта неисправность в Cron?

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

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

спасибо за наступление

Рейтинг:0
флаг vn
  1. Чем может быть вызван этот сбой в Cron?

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

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

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

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

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

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

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

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

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

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

  1. Буду ли я свободен от таких проблем, если сделаю PHP системой, работающей в фоновом режиме?

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

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.