Стресс-тест сайта: как узнать, при какой нагрузке сайт откажет

Обновлено

Нагрузочный тест отвечает на вопрос «выдержит ли сайт столько-то посетителей». Стресс-тест отвечает на другой: сколько вообще выдержит сайт и что произойдёт, когда предел будет превышен. Это знание нужно, чтобы понимать запас прочности: если на акцию ждут 500 человек, а сайт ломается на 600, запаса почти нет.

Чем стресс-тест отличается от нагрузочного

  • Нагрузочный тест — проверка конкретного сценария: «500 человек одновременно в течение 10 минут». Результат: выдержал или нет, и с каким временем ответа.
  • Стресс-тест — нагрузка растёт постепенно, пока сайт не начнёт отказывать. Результат: точка, где начинаются проблемы, и то, как именно сайт ломается.

Обычно их проводят вместе: сначала ищут предел, потом проверяют, что ожидаемая нагрузка с запасом ниже него.

Как выглядит отказ

Сайты редко «падают» мгновенно. Обычно это происходит в несколько стадий:

  1. Рост времени ответа. Страницы открываются за 2, потом 4, потом 8 секунд. Ошибок ещё нет, но посетители уже уходят.
  2. Первые ошибки. Отдельные ответы 502 или 504 — процессы не успевают, часть запросов отваливается по таймауту.
  3. Массовые отказы. Ответы 503, обрывы соединений; сервер отказывает большинству.
  4. Восстановление. Когда нагрузка снята, хороший сайт приходит в норму за секунды. Плохой — продолжает отказывать, пока его не перезапустят.

Практический «предел» сайта — это не стадия 3, а начало стадии 1: момент, когда время ответа начинает резко расти. Именно эту точку стоит считать вместимостью сайта.

Как провести стресс-тест безопасно

  • Только на своём сайте. Стресс-тест чужого сайта без разрешения — это атака, а не тестирование.
  • В часы минимального трафика. На время теста сайт может замедлиться для настоящих посетителей.
  • Плавный рост нагрузки. Резкий удар максимумом не покажет, где именно начинаются проблемы.
  • Автоматическая остановка. Как только ошибок становится много или страницы открываются дольше 10 секунд, тест должен сам снять нагрузку. Цель — найти предел, а не держать сайт лежащим.
  • Предупредите хостинг, если у него есть защита от DDoS, и тех, кто отвечает за сайт, — чтобы никто не начал «чинить» его посреди теста.

В НагрузкаПро для этого есть ситуация «Найти предел»: нагрузка растёт постепенно, а тест останавливается сам, если доля ошибок превысит 15 % или время ответа 95 % запросов дважды подряд будет больше 10 секунд. В отчёте видно, на скольких посетителях начались проблемы и на каких страницах.

Что делать с результатом

  • Сравните предел с ожидаемым пиком. Если запас меньше 1,5–2 раз, перед акцией нужно ускорять сайт или увеличивать сервер.
  • Посмотрите, какие страницы сдались первыми. Обычно это поиск, фильтры или корзина — их и нужно оптимизировать в первую очередь.
  • Проверьте восстановление. Если после снятия нагрузки сайт не вернулся в норму сам, нужно настроить автоматический перезапуск процессов и лимиты памяти.
  • Повторите тест после изменений и сравните пределы «до» и «после».

Частые причины низкого предела разобраны в статье почему сайт тормозит при наплыве посетителей.

Для разработчиков: а как же JMeter и k6?

JMeter, k6, Gatling и Yandex.Tank отлично подходят для стресс-тестов, особенно со сложными сценариями: авторизация, оформление заказа, API. Но им нужен отдельный сервер для генерации нагрузки, написанный вручную сценарий и время на разбор результатов. Если нужна быстрая проверка после релиза — проще запустить готовую ситуацию в сервисе, а для регулярных проверок вызвать тест из CI через API.

Частые вопросы

Может ли стресс-тест сломать сайт?

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

Чем стресс-тест отличается от DDoS?

Стресс-тест запускает владелец сайта на своём сайте, с плавным ростом и автоматической остановкой. DDoS — атака на чужой сайт без разрешения, её цель — вывести сайт из строя.

Ещё по теме