Защита прогрева от перегрузки сервера — правильная идея. Сайт важнее кэша: если сервер задыхается, лишние рендеры ему не помогут. Но защита «если нагрузка выше порога — пропустить прогон» на общем сервере выключила прогрев на часы, и никто этого не заметил.

Это тридцать седьмая часть цикла «Кэш страниц без MISS».

Что произошло

Каталог среднего размера жил на общем сервере с соседями. Один из соседей занимал 331 % процессора, средняя нагрузка — 3,99. Порог «нагрузка на ядро ≥ 3,0» пропускал прогон целиком. Прогрева не было часами, молча: в журнале не было ни ошибок, ни предупреждений.

Симптом: растёт счётчик «пропущено по нагрузке», время последнего прогона застыло. Если такого счётчика нет — вы этого не увидите вообще.

Ступени вместо выключателя

Нагрузка на ядроЧто делает воркер
ниже 1,5полный режим
1,5 и выше (мягкий порог)гасит ускоренный догрев, бюджет прогона — треть
3,0 и выше (жёсткий порог)один рендер за прогон — 60 ячеек в час, но очередь тает
8,0 и выше (авария)пропуск с переносом события

Плюс отдельная остановка по памяти: если процесс занял больше 70 % своего лимита, прогон заканчивается.

function warm_budget(int $full): int {
    $load = sys_getloadavg()[0] / max(1, cpu_cores());
    if ($load >= 8.0) { warm_count('skipped_load'); return 0; }
    if ($load >= 3.0) { warm_count('throttled');    return 1; }
    if ($load >= 1.5) { return (int) ceil($full / 3); }
    return $full;
}

Главное — на жёстком пороге очередь всё равно движется. Медленно, но посетители рано или поздно получают тёплые страницы, а не MISS навсегда.

Три гипотезы, которые не подтвердились

До того как найти порог нагрузки, мы проверили три очевидных версии — и все оказались ложными:

ГипотезаЧто показал замер
кэш слишком часто сбрасывается4 полных сброса за 12 часов — немного
обход не успевает73 круга за 12 часов — успевает с запасом
не хватает памяти16 МБ при пороге 717 МБ

Проверяйте гипотезу замером, прежде чем чинить. Любую из трёх можно было «исправить» — и потратить день на правку, которая ничего бы не изменила.

Прогрев на общем сервере работает рывками?

Пришлите адрес — проверю, как ваш воркер реагирует на нагрузку соседей.

· полезно?
АЧ
Алексей Чикун веб-разработчик, команда TRIOHEAD

Делаю сайты и сервисы целиком: от вёрстки до сервера. Пишу о том, что проверил на своих проектах.

Комментарии

// загружаю комментарии…

Комментарии публикуются после проверки. Ссылки и HTML не принимаются.