Сайт тормозит при наплыве посетителей: 8 частых причин
Обновлено
Знакомая ситуация: в обычные дни сайт работает нормально, а во время рекламы, рассылки или распродажи начинает открываться по 10 секунд или показывает «502 Bad Gateway». Причина почти никогда не в том, что «сервер слабый» в целом, — обычно это одно конкретное узкое место. Ниже — восемь самых частых и как понять, какое из них ваше.
Сначала: как понять, что именно тормозит
Тормоза под нагрузкой невозможно увидеть, просто открыв сайт: когда вы проверяете, посетителей мало и всё быстро. Нужно воспроизвести нагрузку. Нагрузочный тест постепенно увеличивает число посетителей и показывает:
- при каком числе посетителей время ответа начинает резко расти;
- какие страницы сдаются первыми — главная, каталог, поиск, карточки;
- какие ошибки появляются — 502, 503, 504 или обрывы соединения;
- сколько трафика занимает статика — картинки, стили, скрипты.
Эти четыре наблюдения почти всегда указывают на одну из причин ниже.
1. Нет кэша страниц
Признак: время ответа растёт плавно и одинаково на всех страницах, даже на тех, что одинаковы для всех посетителей.
Каждая страница собирается заново для каждого посетителя: код CMS, десятки запросов к базе. Включите кэш страниц — в CMS (композитный сайт в Битриксе, плагины кэша в WordPress) или на уровне сервера (nginx fastcgi_cache, Varnish). Это самое эффективное изменение для большинства сайтов.
2. Не хватает процессов PHP или приложения
Признак: до определённой нагрузки всё быстро, затем время ответа резко растёт, появляются 502 и 504.
Сервер обрабатывает одновременно столько запросов, сколько у него рабочих процессов, остальные ждут в очереди. На виртуальном хостинге их бывает 5–10. Решение — увеличить число процессов PHP-FPM (если хватает памяти) или перейти на тариф или VPS с большим лимитом.
3. Медленные запросы к базе данных
Признак: сдаются поиск, фильтры каталога, страницы с сортировкой; главная держится.
Запросы без индексов, перебор всего каталога на каждый фильтр. Помогают индексы, кэш результатов фильтрации, отдельный поисковый движок (Sphinx, Elasticsearch, встроенный поиск CMS с индексом) и настройка памяти базы данных.
4. Статика отдаётся тем же сервером
Признак: большой объём трафика при небольшом числе запросов страниц; упирается канал.
Картинки, стили и скрипты — это 70–90 % трафика сайта. Если их отдаёт тот же процесс, что собирает страницы, он тратит время впустую. Отдавайте статику через nginx с долгим кэшированием в браузере или через CDN, сжимайте картинки в WebP.
5. Тяжёлые внешние запросы при каждом открытии
Признак: отдельные страницы (карточки, корзина) медленные даже без нагрузки и становятся очень медленными под ней.
Запрос остатков в 1С, курсов валют, расчёт доставки, внешние API на каждое открытие страницы. Решение — кэшировать ответы на несколько минут и синхронизировать данные по расписанию, а не в момент открытия.
6. Фоновые задачи на запросах посетителей
Признак: время ответа «скачет» — отдельные запросы очень медленные без видимой причины.
Агенты Битрикса, WP-Cron в WordPress, отправка писем и пересчёт индексов прямо во время запроса посетителя. Переведите их на системный cron.
7. Лимиты хостинга
Признак: при достижении определённой нагрузки сайт сразу начинает отвечать 503 или 508, хотя до этого был быстрым.
Виртуальные хостинги ограничивают процессорное время, число процессов и одновременных соединений. При превышении сайт отключают на время. Узнайте лимиты своего тарифа и сравните их с результатами теста.
8. Защита от DDoS срабатывает на настоящих посетителей
Признак: посетители видят страницу проверки «я не робот» или ошибку 429 Too Many Requests.
Слишком строгие правила защиты при наплыве принимают обычных покупателей за атаку. Проверьте настройки на время акции.
Что означают ошибки
- 502 Bad Gateway — веб-сервер не получил ответа от PHP или приложения: процесс упал или занят.
- 503 Service Unavailable — сервер отказывает сознательно: переполнена очередь или сработал лимит.
- 504 Gateway Timeout — ответ не уложился в отведённое время: запрос слишком долгий или очередь слишком длинная.
- 429 Too Many Requests — сработало ограничение частоты запросов, обычно защита от ботов.
Порядок действий
- Запустите нагрузочный тест и найдите предел и страницы, которые сдаются первыми.
- Исправьте одну причину — начните с кэша страниц, если его нет.
- Повторите тест с той же нагрузкой и сравните результаты.
- Повторяйте, пока сайт не будет держать ожидаемый пик с запасом в 1,5–2 раза.
Подробнее о конкретных CMS — в статьях про 1С-Битрикс и WordPress.
Частые вопросы
Что значит ошибка 502 Bad Gateway при нагрузке?
Веб-сервер (обычно nginx) не дождался ответа от PHP или приложения: процессы заняты, упали или не уложились в таймаут. Чаще всего не хватает рабочих процессов или памяти.
Что значит ошибка 503 Service Unavailable?
Сервер сознательно отказывает: переполнена очередь запросов, сработал лимит хостинга или защита от перегрузки. Это сигнал, что сайт достиг своего предела.
Поможет ли просто взять тариф хостинга мощнее?
Иногда да, но часто проблема в отсутствии кэша или в одной тяжёлой странице, и мощный сервер лишь отодвигает предел. Сначала найдите, какая страница тормозит первой.
Ещё по теме
- Нагрузочное тестирование сайта: зачем, когда и как
Что это такое, какие бывают тесты, какие цифры смотреть и как провести первую проверку за 10 минут.
- Как проверить, выдержит ли интернет-магазин распродажу
Какие страницы магазина падают первыми, сколько посетителей закладывать на акцию и что сделать за неделю до неё.
- Нагрузочное тестирование сайта на 1С-Битрикс
Как проверить сайт на Битриксе под нагрузкой и какие настройки кэша, PHP и MySQL дают больше всего.