Вебформат

Главная/Блог/ИТ-специалистам

ИТ-специалистам23 мая 20269 мин

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

На какое число посетителей рассчитан ваш сайт, чтобы он не тормозил? Этот вопрос лучше задать до рекламной кампании, а не после. Разбираем, зачем нужно нагрузочное тестирование, как составить сценарии и какие ошибки сводят тест на нет.

Поделиться
Нагрузочное тестирование · запас прочности до наплыва трафика

Почти каждая веб-студия слышит от клиента одну и ту же фразу: сайт жутко тормозит, сделайте что-нибудь. Беда в том, что узкое место ищут уже после запуска - когда реклама проплачена, трафик пришёл, а система его не держит. Остановить кампанию выходит не всегда: баннер на чужом сайте уже оплачен, и снимать его никто не будет.

Поэтому про производительность уместна поговорка: готовь сани летом. Нагрузочное тестирование заранее показывает, сколько посетителей сайт выдержит и что сломается первым - чтобы наплыв трафика не превратился в отказ сервиса.

Почему сайт работает медленно

В подавляющем большинстве случаев причина - одна из двух:

  • Неоптимизированный код - тяжёлые запросы, лишние обращения к базе, отсутствие кэша.
  • Ограничения хостинга - низкий тариф, слабое железо, узкий сетевой канал.

Даже если сегодня сайт быстрый, на старте полезно ответить на три вопроса: при каком числе посетителей скорость страниц ещё комфортна; при каком наступает отказ сервиса; за счёт чего сайт ляжет в первую очередь - процессора, памяти или сетевого канала. Последнее особенно важно при наплыве новых пользователей: в их браузерах ещё нет закэшированных стилей, картинок и скриптов, и узкий канал может убить сайт просто трафиком.

Что такое нагрузочное тестирование

Нагрузочное тестирование - это проверка производительности сайта под потоком запросов: сбор метрик, измерение времени отклика и сопоставление с требованиями. Тест прогоняют специальными сервисами - например, k6, Apache JMeter, Яндекс.Танк, BlazeMeter. При выборе сервиса смотрят на несколько вещей:

  • Что измеряет - только время генерации страницы или полную загрузку с nginx, который отдаёт статику (js, css, картинки). Полная загрузка показательнее.
  • Сложные сценарии - умеет ли прогонять цепочку вроде оформления заказа, а не только дёргать одну страницу.
  • Расписание - можно ли запустить тест ночью, не нарушая сон админу.
  • Лимиты и пинг - хватает ли мощности по числу соединений и насколько близко нагрузочный сервер к вашему.

На что обратить внимание при тесте

  • 01Отключите кэш. Чтобы найти узкие места, тестируйте с выключенным кэшем - и самого Битрикса, и низкоуровневого MySQL. Под это держат отдельные скрипты на cron.
  • 02Наращивайте нагрузку постепенно. Сразу на максимуме потоков легко уронить сервер. Идите серией тестов, увеличивая потоки шагами.
  • 03Отключите контроль активности Битрикс или добавьте исключения - иначе нагрузочные серверы быстро забанит, и оплаченный тест отработает вхолостую.
  • 04Поднимите лимит соединений MySQL выше прогнозируемого числа потоков, иначе получите ошибку Too many connections вместо честной картины.

Сценарии решают всё

Ключевая ошибка закрадывается в самом начале - в выборе, куда слать нагрузку. Если направить ботов не на узкое место, тест покажет отличный результат, а реальные пользователи получат отказ сервиса. Поэтому запуску всегда предшествует моделирование действий пользователя: открытие карточки и оформление заказа - это разная нагрузка, как и заказ на 50 позиций против заказа на 800.

Прежде чем составлять сценарии, изучите статистику Яндекс.Метрики или аналитики: на какие страницы заходят, чем пользуются, сколько товаров в среднем и в максимуме кладут в заказ. При росте трафика те же действия вырастут пропорционально - вот на них и направляют ботов.

Типичный набор действий интернет-магазина, который стоит заложить в сценарии:

  • главная, список товаров, последняя страница пагинации, карточка товара;
  • сортировка, переключение количества на странице, умный фильтр, поиск по сайту;
  • добавление в корзину, регистрация, авторизация;
  • корзина с малым и большим числом позиций;
  • оформление обычного, оптового и быстрого заказа.

Не откладывайте на потом

Нагрузочный тест особенно важен перед всплеском спроса - маркетинговой кампанией или сезоном: цветы к 8 Марта, шины в межсезонье. Но задача шире разового пика: это и поиск узких мест, и проверка запаса прочности сервера, и балансировка в веб-кластере, и подготовка нового сайта к публикации на продакшен.

Базовую проверку модулями Битрикса можно сделать самому - см. самостоятельный аудит сайта на 1С-Битрикс. Часть нагрузки на больших каталогах снимает HTTP-кэширование, а тяжёлый код иногда тянет за собой перевод сайта на PHP 8. Если хотите узнать запас прочности до того, как придёт трафик, - проведём нагрузочное тестирование и покажем, что чинить.

Сомневаетесь, выдержит ли сайт наплыв трафика?

Обсудим ваш проект - оценим запас прочности вашего сайта, найдём узкие места в производительности и предложим план: что оптимизировать в коде, а что на стороне сервера.