EDGESECTION

Почему сайт ломается при нагрузке — и как это предотвратить

2

«Сайт лёг». Эта фраза вызывает холодный пот у любого владельца бизнеса. Вы запустили рекламу, получили ожидаемый трафик... и вместо заявок — белый экран и ошибка 503 или 500. Клиенты уходят к конкурентам, бюджет слит, репутация подмочена.

В этой статье — разбор типичных технических причин, по которым сайт падает при росте нагрузки (от 100 до 10 000 посетителей). И главное — что сделать, чтобы этого не произошло. Большинство проблем решается настройкой, а не переписыванием сайта с нуля.

Как выглядит «падение сайта» под нагрузкой

Часто сайт не падает «весь», а «тормозит» какие-то страницы и функции. Но для клиента разницы нет — он уходит.

8 типичных «узких горлышек», которые убивают сайт

1. Слабый хостинг (shared hosting)

Обычный дешёвый хостинг за 300-1000 ₽/месяц делит ресурсы одного сервера между 500-1000 сайтами. Ваш сосед отъел процессор, пришёл трафик — и всё. Ресурсов просто нет.

Предотвращение: Переход на VPS/VDS с гарантированными ресурсами (от 2000-5000 ₽/мес). Для серьёзного буфера — облачные серверы (Yandex Cloud, Selectel), которые можно быстро масштабировать.

2. Неоптимизированная база данных

Десятки (или сотни) запросов к MySQL на каждую страницу, нет индексов, огромные таблицы. При 10 посетителях база ещё успевает. При 500 — падает.

Предотвращение: Включить медленный лог запросов (slow query log) и найти самые тормозные запросы. Добавить индексы. Установить плагин кеширования запросов (например, Redis или Memcached).

3. Отсутствие кеширования страниц

Каждый посетитель заставляет сервер полностью генерировать страницу: инициализировать PHP, выполнить SQL-запросы, собрать HTML. Это в 10-100 раз «тяжелее», чем просто отдать готовый статический файл.

Предотвращение: Включить кеширование страниц (Page Cache). Для WordPress плагины WP Rocket, W3 Total Cache, LiteSpeed. Страница будет генерироваться один раз, а потом отдаваться статикой тысячам пользователей.

4. PHP-процессы «заканчиваются»

У вас настроено max 30 одновременных PHP-процессов (настройка PHP-FPM). При 40 параллельных пользователях — лишние 10 стоят в очереди (сайт висит) или получают ошибку.

Предотвращение: Увеличить количество процессов PHP-FPM (max_children, start_servers). Следить за потреблением памяти (php-fpm status page).

5. Длинные операции, блокирующие ответ пользователю

Отправка письма, парсинг PDF, генерация отчёта, запрос к медленному внешнему API. Пользователь ждёт 30 секунд, серверный таймаут — ошибка 504.

Предотвращение: Выносить длительные задачи в очередь (RabbitMQ, Redis). Пользователь получает ответ мгновенно («принято в обработку»), а задача выполняется фоном.

6. «Тяжёлые» изображения и неоптимизированный фронтенд

Картинки по 10 МБ, десятки файлов CSS/JS, не подключён сжатие gzip/brotli. Это не столько убивает сервер, сколько вынуждает пользователя уходить от долгой загрузки.

Предотвращение: Сжатие изображений (ShortPixel, Imagify), конвертация в WebP, минификация CSS/JS, подключение CDN (Cloudflare). Включение сжатия gzip на сервере.

7. Проблемы с внешними API (сторонние сервисы)

На сайте виджет погоды, отзывы с Яндекс.Карт, трекер доставки. Внешний сервис тормозит или не отвечает. Ваш сайт ждёт, пока он ответит. В итоге виснут все страницы, где есть этот виджет.

Предотвращение: Все вызовы внешних API делать асинхронными (через JavaScript, отдельный поток). Чтобы задержка внешнего сервиса не блокировала показ основного содержимого.

8. Утечки памяти (memory leak)

Код или плагин со временем потребляет всё больше памяти. При створации каждого нового посетителя память не освобождается. В конце концов память кончается, сервер перезагружается.

Предотвращение: Мониторинг памяти (New Relic, встроенный мониторинг хостинга). Тестирование с имитацией длительной работы.

Как предотвратить коллапс до того, как он случится

1. Нагрузочное тестирование (Stress test). Это самое главное, что вы можете сделать. Запустите Яндекс.Танк, JMeter или Loader.io. Узнайте:

2. Мониторинг реального времени. Настройте Zabbix, Grafana или встроенные мониторинги хостинга. Вы должны видеть:

3. План аварийного восстановления (Runbook). Напишите простую инструкцию на 2 страницы:

4. Лавинная защита (дросселирование). Настроить nginx/Cloudflare на ограничение количества запросов с одного IP в секунду. При превышении — отдавать 429 Too Many Requests, а не крашить сервер.

5. Регулярная оптимизация (а не «перед сезоном»). Дефрагментация таблиц, обновление статистики MySQL, ревью плагинов.

Что делать, если сайт уже падает (аварийные действия)

  1. Увеличить ресурсы сервера в панели управления: Сменить тариф на более мощный (больше CPU/RAM). Это делается за 1-2 минуты.
  2. Временно выключить «тяжёлые» плагины (поиск, боковики, рекомендуемые товары). Часто это помогает резко снизить нагрузку.
  3. Включить Surmaintenance Mode (заглушку «сайт на обслуживании»), чтобы пользователь видел не ошибку, а приятную форму сбора контактов.
  4. Отключить логирование запросов и дебаг-режим.
  5. Увеличить лимиты PHP (memory_limit, max_execution_time, max_input_vars).
  6. Если база данных падает (Too many connections) — временно добавить параметр max_connections в MySQL (аккуратно, может не хватить RAM).
  7. Включить кеширование на уровне веб-сервера (nginx cache) или Cloudflare «Even под нагрузкой».

⚡ Стресс-тест и аудит выживаемости вашего сервера

Проведём нагрузочное тестирование вашего сайта: эмулируем 200, 500, 1000 и 5000 пользователей. Вы получите отчёт: при каком RPS начинаются ошибки, какие запросы тормозят, что менять в первую очередь. Окупится первым же часом пик без простоя.

👉 Оставьте заявку на сайте edgesection.ru или напишите в Telegram. Укажите «Тест нагрузки».

Настройка и оптимизация highload-проектов.

Резюме: главное о стабильности сайта

Оставить заявку
Автор:
photoAccount
EDGESECTION Блог