Нагрузочное тестирование сайта: выдержит ли он рекламу и акцию

Нагрузочное тестирование — это проверка, сколько одновременных посетителей выдержит сайт до того, как начнёт тормозить или падать. Его делают перед запуском большой рекламной кампании, рассылки на десятки тысяч адресов, телевизионного эфира или распродажи. Тест на копии сайта занимает 1–3 дня и показывает узкое место: обычно это база данных, тяжёлые страницы каталога или поиск. Цель — не «выдержать миллион», а знать свой предел и иметь запас в 2–3 раза от ожидаемого пика.
Когда это нужно
- Вы запускаете рекламу с бюджетом, который в разы больше обычного.
- Будет рассылка или пуш на большую базу: все придут в первые 10–20 минут.
- Запланирован эфир, упоминание у крупного блогера, выход в СМИ.
- Распродажа с началом в конкретное время.
- Сайт уже падал при наплыве, и вы не знаете почему.
- Переезд на новый сервер или крупное обновление.
Если ничего из этого не ожидается, а сайт работает стабильно, полноценный нагрузочный тест обычно не нужен — хватает мониторинга.

Как посчитать ожидаемую нагрузку
Посетителей в сутки — плохая мера. Важен пик: сколько человек одновременно открывают страницы в самую загруженную минуту.
- Возьмите в Метрике максимальное число визитов за час в обычный день.
- Оцените, во сколько раз вырастет трафик: рассылка на 50 000 адресов при открываемости 20% и кликабельности 5% даст около 500 переходов, большая часть — в первый час.
- Учтите, что один посетитель открывает несколько страниц и каждая страница — это десятки запросов к серверу: картинки, скрипты, данные.
- Заложите запас в 2–3 раза.
| Показатель | Значение |
|---|---|
| Обычный пик | 120 визитов в час |
| Ожидаемый рост из-за рассылки и рекламы | ×8 |
| Пик в первые 15 минут | около 400 одновременных посетителей |
| Страниц на посетителя | 5 |
| Цель теста с запасом | 1 000 одновременных посетителей |
Как проходит тест
- Копия сайта на сервере, похожем на рабочий. Тестировать рабочий сайт в рабочее время нельзя — вы сами устроите ему аварию.
- Сценарии: главная → каталог → карточка → корзина → оформление. Плюс поиск и фильтры, если они есть.
- Инструмент — например, k6, JMeter или Locust (документация k6). Он имитирует тысячи посетителей, которые проходят сценарии.
- Постепенный рост нагрузки: 50, 100, 200, 500 посетителей, пока время ответа не станет неприемлемым или не появятся ошибки.
- Наблюдение за сервером: процессор, память, диск, база данных, количество соединений.
- Отчёт: предел, узкое место, что исправить.
Типичные узкие места
| Узкое место | Признак | Решение |
|---|---|---|
| База данных | Медленные запросы каталога и фильтров | Индексы, кеширование результатов |
| Нет кеширования страниц | Каждая страница собирается заново | Кеш страниц, статическая генерация |
| Тяжёлые картинки | Канал сервера забит | CDN, WebP, правильные размеры |
| Мало процессов PHP или Node | Очередь запросов, ошибки 502 и 504 | Настройка пула, больше ресурсов |
| Поиск | Каждый запрос — полный перебор | Поисковый индекс |
| Внешние сервисы | Сайт ждёт ответа CRM или доставки | Асинхронные вызовы, таймауты |
| Сессии и корзина | Блокировки при одновременной записи | Хранилище сессий в памяти |
Что делать, если теста не будет
Если времени на полноценный тест нет, минимальный набор перед акцией:
- включить кеширование страниц каталога и статей;
- проверить, что картинки оптимизированы;
- временно увеличить ресурсы сервера — у облачных провайдеров это делается за минуты;
- отключить тяжёлые виджеты и сторонние скрипты на время пика;
- подготовить простую страницу-заглушку «высокая нагрузка, попробуйте через минуту» на случай аварии;
- держать на связи администратора в момент старта.
Отдельно проверьте мобильную версию: серверная нагрузка от телефонов и компьютеров похожа, но мобильные посетители чувствительнее к медленным ответам и уходят быстрее.
Сколько стоит
| Объём | Срок | Ориентир |
|---|---|---|
| Простой тест главных страниц | 1 день | 15–30 тыс. ₽ |
| Тест магазина со сценариями заказа | 2–3 дня | 30–70 тыс. ₽ |
| Тест + исправление узких мест | от 1 недели | по оценке |
Тест окупается, если стоимость часа простоя в день акции больше его цены. Для магазина, который ждёт сотни заказов за вечер распродажи, это почти всегда так.
Нагрузка и сторонние сервисы
Сайт может выдержать нагрузку, а сторонний сервис — нет. Платёжный шлюз, сервис расчёта доставки, CRM, сервис SMS-подтверждений имеют свои лимиты запросов. На распродаже сайт отправляет в CRM сотни заявок в минуту, CRM отвечает ошибкой превышения лимита, и заявки теряются. Узнайте лимиты API всех внешних сервисов заранее и сделайте очередь: сайт принимает заказ, сохраняет его у себя и отправляет во внешние системы постепенно, с повторами при ошибках. Тогда пик нагрузки не превращается в потерянные заказы.
После акции
Сохраните отчёт теста и сравните с реальными графиками нагрузки в день акции. Так вы поймёте, насколько точным был прогноз, и к следующей кампании сможете готовиться быстрее. Если сайт выдержал с запасом, временно увеличенные ресурсы сервера можно вернуть, чтобы не переплачивать.
Материалы для проверки
Если нужна реализация
Состав работ зависит от текущего проекта и подтверждённой причины. Можно обсудить диагностику или разработку подходящего решения.
Вопросы и ответы
Сколько посетителей выдержит обычный сайт?
Зависит от сервера, кеширования и тяжести страниц. Сайт с кешированием на недорогом VPS выдерживает сотни одновременных посетителей, без кеширования — иногда десятки. Узнать точно можно только тестом.
Можно ли тестировать рабочий сайт?
Только в согласованное время с минимальным трафиком и с осторожной нагрузкой. Надёжнее тестировать копию на похожем сервере.
Чем нагрузочный тест отличается от DDoS?
Тест делает владелец сайта осознанно, на копии, с контролем нагрузки. DDoS — атака злоумышленников на рабочий сайт. Технически поток запросов похож, поэтому хостинг нужно предупредить.
Поможет ли просто купить сервер мощнее?
Иногда да, но часто узкое место — база данных или отсутствие кеша, и более мощный сервер даёт меньший эффект, чем исправление одного медленного запроса.
За сколько до акции делать тест?
За 2–3 недели, чтобы успеть исправить узкие места и проверить ещё раз.
Что делать, если сайт всё-таки упал во время акции?
Включить страницу-заглушку, временно отключить тяжёлые функции вроде поиска и фильтров, увеличить ресурсы сервера и сообщить клиентам в рассылке или соцсетях, когда сайт заработает.