Довольно часто пользовательские задания cron на общих серверах выполняются одновременно и попадают в конфликт (насколько я могу судить). Итак, нагрузка резко возрастает, Nagios злится, Apache перестает отвечать, вы не можете подключиться по SSH, потому что время ожидания истекло и т.д. для решения этой проблемы, когда pgrep crond | wc -l возвращает> 50.
Кажется, что их можно поразить, ограничив количество процессов crond, запущенных в любой момент времени или аналогичных (например, отправив SIGSTOP, пока некоторые из них не станут менее хакерскими), но я еще не нашел никаких хороших зацепок.
Аппаратное обеспечение: 4 процессора и выше, младший - Dell 1435s с ~ 8 ГБ памяти, RAID 10, WD EADS, в основном Plesk и cPanel, но также и некоторые злые системы Sphera.
Как ты справляешься с этой проблемой, SF?
Ты можешь использовать cron.allow
и cron.deny
чтобы ограничить доступ пользователей к cron, или вы можете использовать Лимиты PAM чтобы ограничить использование ЦП, количество процессов и тому подобное. Помимо этого, решение состоит в том, чтобы создать что-то для мониторинга и решения cron
пользователей, потому что cron на самом деле не имеет ограничения на количество запускаемых заданий.
Я думаю, что в CPanel есть что-то о количестве одновременно выполняемых заданий cron, но это особый инструмент (не уверен).
Я думаю, у вас одна из этих проблем:
недостаточно памяти для одновременного запуска crontab. Вы можете исправить:
высокий ввод / вывод. Вы можете исправить:
ionice
Попытайтесь выяснить, переключается ли машина, и если она не переключается в ночное время, измените класс приоритета ввода-вывода cron на idle:
sudo ionice -c 3 -p $(pgrep cron)
Я всегда планировал cronjobs в случайное время (особенно минуты). Я обычно вижу примеры cron, которые запускаются в полночь, например:
0 0 * * * /usr/bin/echo "Job ran"
Если у вас много таких заданий, вы напрашиваетесь на проблемы. К сожалению, это часто длительные системные задания. Я также обычно планирую задания в разное время в течение окна пакетного процесса. (С 23 до 05) часов.
Мне нравится новая спецификация cron, используемая в Ubuntu. Это несколько /etc/cron.*
каталоги, чтобы указать задания для запуска. Они запускаются последовательно, а не параллельно, ограничивая нагрузку.
Вы должны увидеть, что запланировано в файлах, расположенных в /etc/spool/cron/crontabs
. Для чтения этих файлов потребуется root-доступ. Если проблемы вызывают пользователи, обсудите с ними проблему.
Вы также можете проверить /var/log/syslog
для записей CRON, чтобы узнать, что и когда запускается.