Вчера получил отчет о повышенной нагрузке, который создает крон блоголёта. Каким же образом можно снизить нагрузку вне зависимости от того, создает ли на самом деле крон нагрузку? Первая мысль - это решение в лоб: понижение приоритета скрипта. На никсах это можно сделать даже внутри самого скрипта, но... Как всегда но: можно понизить приоритет всего процесса php, который исполняет все php скрипты и тогда просто получим низкий приоритет для всего сервера, что, безусловно, скажется катастрофическим образом на скорости сайта. Второй путь - запускать скрипт крона в отдельном процессе, в котором можно и поиграться с приоритетом. Путь для меня несколько сложный, так как требует доступа к шелу из скрипта, и я не уверен в его работоспособности - хотелось бы получить ответ на этот вопрос от специалистов по серверам.

Второй путь - внутри скрипта делать периодически sleep на 1-3 секунды. Если разбираться с тем, что происходит в кроне и откуда берется нагрузка, то на ум приходит только пингование - для одного поста дергаются все сайты, перечисленные в списке сервисов пингования. Сейчас по умолчанию это 26 сервисов для каждого из которых скрипт открывает сокет и ждет ответа. Можно после каждого сервиса делать секундную паузу. Также можно делать паузу перед каждым заданием, который крон дергает, например публикация отложенных записей, отсылка комментариев подписчикам, а также раз в сутки создание сайтмапа всего сайта.