phpdev.org Программисты Laravel, Yii2, Битрикс
  • Поддержка
  • Разработка
  • Кейсы
  • О компании
  • Блог
  • Контакты
  • Галерея
  • Клиентам
  • RU | EN
Главная
Блог
Нагрузочное тестирование с помощью Siege
28.07.2021

Нагрузочное тестирование с помощью Siege

$ yum install siege

Одним из инструментов для нагрузочного тестирования web-серверов есть Siege.

Siege умеет выполнять многопоточное нагрузочное тестирование web-серверов по протоколу HTTP (S)/1.0/1.1 методами GET и POST. Утилита симулирует параллельные запросы к веб-серверу на протяжении заданного времени и в конце теста вычисляет следующие показатели:
  • количество совершённых транзакций в процессе тестирования;
  • среднее количество транзакций в секунду;
  • длительность самой долгой и самой быстрой транзакций;
  • количество и процентное соотношение успешных/неудачных транзакций;
  • среднее время, потребовавшееся серверу для ответа;
  • объём переданных данных и скорость обмена данными с сервером;
  • среднее количество транзакций, которые сервер смог обрабатывать одновременно.
  • Запросы к серверу утилита может выполнять как к одному и тому же URL, так к разным на основе списка. Паузы между запросами к серверу могут быть как произвольными в пределах заданного интервала, так и вовсе отсутствовать, позволяя таким образом выполнять тест производительности сервера.
Siege присутствует в репозиториях всех популярных дистрибутивов, так что вы должны без труда установить её в своей системе. Если же ваш дистрибутив не располагает утилитой в среди включённых в комплект пакетов, вы можете самостоятельно собрать siege из исходных кодов, полученных со страницы проекта на freshmeat.net.

Условия тестирования, приводимого в этой заметке, те же самые, что и в предыдущей. Следуя схеме тестирования, определённой в предыдущей статье, для начала выполним 1000 последовательных запросов статического HTML-файла:

$ siege -b -c 1 -r 1000 http://test.ru/test.php 

Здесь:
  • опция '-b' переключает утилиту в режим тестирования производительности, т. е. siege не будет делать паузу случайной длительности между запросами;
  • опция '-c' определяет количество параллельных запросов, отправляемых за один раз. В нашем случае — один;
  • при помощи опции '-r' определяется количество повторов запроса.

  После выполнения тестирования утилита выведет результаты:
Transactions:         1000 hits
Availability:       100.00 %
Elapsed time:        10.97 secs
Data transferred:         8.95 MB
Response time:         0.01 secs
Transaction rate:        91.16 trans/sec
Throughput:         0.82 MB/sec
Concurrency:         1.00
Successful transactions:        1000
Failed transactions:            0
Longest transaction:         0.03
Shortest transaction:         0.00

Из результатов теста видно, что:
  • общее количество транзакций составило 1000;
  • «доступность» (т. е. процент успешных сокет-подключений ) сервера составила 100%;
  • тест занял 10,97 секунд;
  • было передано 8,95 мегабайт данных;
  • среднее время, потребовавшееся серверу для ответа составил 0,01 секунды;
  • в среднем за одну секунду удалось выполнять 91,16 транзакций;
  • средняя скорость обмена данными с сервером составила 0,82 мегабайта в секунду;
  • параллельно сервер обрабатывал один запрос;
  • было успешно (HTTP-код ответа сервера <400) обработано 1000 транзакций;
  • не удалось обработать (HTTP-код ответа сервера >=400) обработано 0 транзакций;
  • длительность самой длинной по времени транзакции составила 0,03 секунды;
  • длительность самой длинной по времени транзакции составила 0,00 секунд.


Попробуем теперь выполнить запрос того же URL 1000 раз, только теперь одновременно будем отправлять по 200 запросов за раз:
$ siege -b -c 200 -r 5 http://test.ru/test.php
Transactions:         1000 hits
Availability:       100.00 %
Elapsed time:        12.69 secs
Data transferred:         8.95 MB
Response time:         1.70 secs
Transaction rate:        78.80 trans/sec
Throughput:         0.71 MB/sec
Concurrency:       134.16
Successful transactions:        1000
Failed transactions:            0
Longest transaction:        10.26
Shortest transaction:         0.01

В результатах этого теста видим значительно возросшее время, требуемое серверу для ответа — 1,7 секунды против 0,01 в предыдущем тесте. При этом на 12 снизилось количество транзакций обрабатываемых за одну секунду. Из генерируемых двухсот одновременных запросов сервер в среднем смог обрабатывать лишь 134,16. Но при всём этом доступность сервера составила 100%, т. е. сервер не был загружен настолько, что был не в состоянии принимать входящие сетевые соединения.

Важно!
Вот тут необходимо сделать главный вывод: 100 одновременных посетителей на сайте - это уровень среднего развитого интернет магазина. Тестирование необходимо проводить с запасом, т.е. 200 посетителей - это отличная проверка реализации сайта и достаточности сервера. Если требуемое время отклика начинает переваливать на 1,5 сек, то вывод прост - где-то есть проблема и в случае появления подобной нагрузки - пользователи начнут отказываться от пользования сайта просто в следствие видимого торможения ресурса. 

Попробуем выполнить тот же тест, только исключив опцию '-b', что приведёт к снижению нагрузки на сервер за счёт произвольных пауз между транзакциями, что больше приближено к реальному поведению клиентов вашего сервера:
$ siege -c 200 -r 5 http://test.ru/test.php
Transactions:         1000 hits
Availability:       100.00 %
Elapsed time:        12.29 secs
Data transferred:         8.95 MB
Response time:         1.52 secs
Transaction rate:        81.37 trans/sec
Throughput:         0.73 MB/sec
Concurrency:       124.05
Successful transactions:        1000
Failed transactions:            0
Longest transaction:         9.32
Shortest transaction:         0.01

Как видно, некоторые показатели несколько улучшились, за счёт ухудшения показателя Concurrency, что логично. При необходимости вы можете увеличить диапазон случайно временной задержки между отправкой запросов при помощи опции '-d'. Например, чтобы siege выдерживал случайную паузу между запросами в пределах между 0 и 5 секундами:

$ siege -d 5 -c 200 -r 5 http://test.ru/test.php

Если вам необходимо, чтобы siege «побродил» по вашему серверу вместо того, чтобы тупо долбиться на один и тот-же URL, создайте текстовый файл со списком URL, которые необходимо посетить в процессе тестирования и укажите путь к нему при помощи опции '-f':
$ siege -d 5 -c 200 -r 5 -f ~/urls.txt

Чтобы заставить утилиту брать URL из файла не последовательно, а случайно, добавьте опцию '-i':
$ siege -d 5 -c 200 -r 5 -i -f ~/urls.txt

При необходимости вы можете ограничить время, которое будет отведено siege для выполнения теста, при помощи опции '-t'. Обратите внимание, что эта опция имеет приоритет перед опцией '-r'. При указании значения опции '-t' можно использовать суффиксы 's', 'm' и 'h' для определения времени в секундах, минутах и часах соответственно. Например:
$ siege -d 5 -c 200 -t 10s http://test.ru/test.php

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

Возврат к списку


КОНТАКТЫ

Также вы можете связаться с нами по этим контактам:

phpdev.org Программисты Laravel, Yii2, Битрикс
info@phpdev.org
+7 993 898-44-62
+375 44 503 4449
г. Минск, ул. Ольшевского, д. 22, пом. 20
Карта
© 2015 – 2023 PHPDev
Мы в соцсетях:
phpdev.org Программисты Laravel, Yii2, Битрикс
меню
Поддержка Разработка Кейсы О компании Блог Контакты Галерея Клиентам
RU | EN
Программисты Laravel, Yii2, Битрикс
BY +375
  • BY +375
  • RU +7
  • UA +380

Нажимая кнопку «Оставить заявку», Вы даёте согласие на обработку Персональных данных.

phpdev.org Программисты Laravel, Yii2, Битрикс
Спасибо! The application has been successfully sent. We will contact you shortly