Нагрузочное тестирование сайта

Подскажите, пожалуйста, как можно проверить при каком количестве посетителей упадет сайт? Был слабый сервер и я забыл про кэш — после 1000 человек за час все упало. Улучшил железо, поставил кеширование, nginx и унес сервер баз данных на другую физическую машину. Хочу выяснить, сколько посетителей выдержит такая конфигурация. Как это проверить? Какими средствами оценить хотя бы порядок величины? (сайт на php+mysql)
  • Вопрос задан
  • 51702 просмотра
Пригласить эксперта
Ответы на вопрос 8
@cbx
Если хочется просто и быстро, то вполне сгодится Apache Benchmark идущий в комплекте с веб-сервером Apache. Как-то так:

ab -n 1000 -c 10 http://my.site.dot.com/url/path/

Варьируя число одновременных соединений (-c 10) и общее количество запросов (-n 1000) можно примерно прикинуть когда сайт начнёт загибаться. Тестировать лучше с другой машины. Также стоит учесть, что если контент страницы меняется от запроса к запросу (динамика), то AB посчитает такие ответы сервера как Failed: www.celebrazio.net/tech/unix/apache_bench.html

Начать тестирование лучше с наиболее часто посещаемых страниц исходя из аналитики сайта, а также ориентируясь на своё понимание его структуры (если сайт самописный, то вы должны прекрасно представлять его слабые в плане производительности разделы).

Если захочется большего — смотрите более богатые по возможностям Apache JMeter или Tsung (первый графический, второй консольный). Оба умеют кластеризоваться и генерировать нагрузку с нескольких машин (для этого удобно арендовать инстансы в Amazon EC2), имеют встроенный прокси для записи пользовательских сессий и позволяют задать скорость клиентского соединения (актуально для имитации медленных клиентов и оценки влияния того же nginx). UPD: ещё неплох Yandex Tank

В любом случае, перед тем как измерять производительность сайта, озаботьтесь мониторингом серверов на которых этот сайт крутится. Без этого смысла в бенчмарках очень мало — они дадут вам какие-то цифры, но дальнейшего плана действий у вас не будет. Как минимум — запустите на машинах утилиту top и смотрите загрузку CPU, потребление памяти и дисковую активность. Также после тестирования просматривайте логи на предмет появившихся ошибок (нехватку сокетов, памяти, ошибки веб-сервера или БД). Полезно включить логгирование медленных запросов в MySQL.

Дальше — устраняйте выявленные узкие места и повторяйте процесс заново, до тех пор пока не выйдете на приемлемый уровень производительности.
Ответ написан
Комментировать
StopDesign
@StopDesign
loadimpact.com/ позволяет загрузить сайт (запросы, трафик).

На реальном проекте роботы могут повлиять на работу сайта, т.к. запрашивают непопулярные страницы, которые, скорее всего, не закешированы (или кеш устарел). Поэтому можно попробовать поставить загрузку всего сайта (wget) и одновременно проверять скорость отдачи (ab или loadimpact).

Если это не помогло завалить сайт, попробуйте заказать небольшой DDoS (GET- и POST-запросами).
Ответ написан
Комментировать
dimanjy
@dimanjy
Недопрограммист и полуинженер.
Тут сперва надо расчеты произвести.
Замерить время выполнения PHP-скрипта, перевести в секунды и умножить на кол-во рабочих PHP-процессов. Вы получите кол-во запросов, которые Ваша система сможет обслуживать в секунду. Зная кол-во запросов к PHP, генерируемых одним пользователем на Вашем проекте, Вы сможете вычислить предельно допустимое кол-во одновременных пользователей.

А из тулзов всем известный ab (Apache Benchmark). Еще очень интересен inject от создателя haproxy. В нем можно задавать сценарии поведения пользователей.
Ответ написан
nightfly
@nightfly
Для начала попробовать синтетику типа ab или siege?
Ответ написан
ap3rus
@ap3rus
Если есть отдельный сервер, для автоматизированной нагрузки можно попробовать JMeter.
Ответ написан
Комментировать
pietrovich
@pietrovich
Ответ написан
Комментировать
svirchoff
@svirchoff
CEO and Founder
Попробуйте Loaddy.com. 50 юзеров бесплатно. 500 юзеров на 10 минут тестирования стоит всего 1$. Никакая синтетика не сможет показать правдивые результаты. У них там и доп. URL можно указать.
Ответ написан
@AlexBelousova
+1 к Loaddy. Очень удобный сервис, пользуюсь им
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы