Siege — утилита для нагрузочного тестирования веб-серверов
Надеюсь, что данный материал будет кому-нибудь полезен.
Siege – это утилита для нагрузочного тестирования веб-серверов. Она была создана для того чтоб дать разработчикам возможность проверить ресурсоёмкость своего кода в условиях, максимально приближенных к реальным. Так же Siege может имитировать обращения к сайту сразу нескольких пользователей. Это позволяет держать сервер как бы «под осадой» долгое время. Количество запросов, произведённых при «осаде», рассчитывается из общего количества пользователей и количества их обращений к серверу. Например 20 пользователей, обратившись по 50 раз, создают в общей сложности 1000 запросов. Результат, выводимый программой после тестирования, включает в себя время затраченное на проверку, общее количество переданной информации ( включая заголовки ), среднее время ответа сервера, его пропускную способность и число запросов на которые пришёл ответ с кодом 200. Эти данные формируются и выдаются при каждой проверке. Подробно они описываются ниже. Siege имеет 3 основных модели работы – режим регрессионного тестирования, режим имитации Интернета и режим грубой силы. Программа считывает порцию ссылок из конфигурационного файла и обращается к ним по очереди ( режим регрессионного тестирования ) или случайно ( имитация интернета ). Или же пользователь может указать один единственный адрес к которому будут производиться все обращения – режим грубой силы.
UPD: спасибо за плюсы, перенес в тематический блог.
Параметры запуска
Формат запуска Siege следующий: «siege опции». Программа может принимать следующие параметры:
' -V '
' –version'
Выводит на экран текущую версию.
' -h '
' –help'
Выводит справку.
' -C '
' –config'
Показывает текущую конфигурацию. Siege считывает настройки и выводит их содержимое. Вы можете их менять редактируя файл $HOME/.siegerc. Если такого файла у Вас нет, следует запустить утилиту siege.config, которая его сгенерирует
' -v '
' –verbose '
Подробный вывод информации. Если эта опция включена Siege будет выводить на экран детальную информацию обо всех обращениях к серверу. Она включает в себя тип HTTP-протокола, код ответа и адрес обращения. Пример:
HTTP/1.1 200 OK: /cgi-bin/whoohoo.cgi?first=Homer&last=simpson
Эта опция особенно полезна в случае регрессионного тестирования или имитации Интернета, когда программа обращается в широкому кругу адресов.
' -g URL '
' –get URL'
Совершает обращение к указанной ссылке. Получает заголовки с сервера и выводит их на экран. Отличный инструмент для точечного тестирования.
' -c NUM '
' –concurrent=NUM '
Количество имитируемых пользователей. Опция позволяет производить тестирование веб-сервера с количеством одновременных пользователей указанных в NUM. Фактически это число ограничивается лишь ресурсами компьютера, но в на практике для хорошего результата требуется имитировать всего пару сотен пользовательских сессий. Помните что при любой конфигурации Вы всё равно не сымитируйте поведение настоящих людей. Хотя бы потому что они задерживаются на каждой странице, читая информацию, а не перебирают ссылки одну за другой.
' -i '
' –internet '
Эта опция используется с конфигурационным файлом содержащим множество ссылок. При её включении Siege случайно выбирает адреса обращений и производит к ним запросы. В реальности Вы не можете сказать пользователям на какие страницы и в какой последовательности они должны заходить. Они будут делать это всегда по разному. Режим имитации Интернета пытается эмулировать такое поведение. Обратите внимание на то что в процессе тестирования к некоторым адресам из файла может не произойти обращений вообще ведь они выбираются случайно.
' -t NUMm'
' –time=NUMm '
Время, за которое должно пройти тестирование. Указывается в формате «NUMm», где NUM это количество единиц времени, а «m» это модификатор S, M, или H для секунд, минут и часов соответственно. Например, для того чтоб запустить тестирование на час Вы можете воспользоваться следующими комбинациями: -t3600S, -t60M, -t1H. Модификатор не чувствителен к регистру, но между ним и числом не должно быть пробелов.
' -f FILE '
' –file=FILE '
Конфигурационный файл содержащий ссылки (SIEGE_HOME/etc/urls.txt). Вы можете использовать эту опцию для того чтоб указывать другой путь к нему. Например:
siege –file=serverb.txt
' – l '
' –log '
Эта опция указывает Siege что она должна записывать всю информацию в лог-файл SIEGE_HOME/var/siege.log. При каждом новом тестировании файл будет дописан.
' – m MESSAGE '
' –mark=MESSAGE '
Эта опция позволяет указать выражение которым будут разделяться записи о разных тестированиях в лог-файле. Вместе с ней не обязательно использовать опцию -l, т.к. она будет включена автоматически. Если выражение в MESSAGE содержит пробелы не забудьте поместить его в кавычки.
' -d NUM '
' –delay=NUM '
Эта опция указывает задержку между обращениями имитируемых пользователей к серверу. Время задержки вычисляется от единицы до введённого числа. При проведении тестирования на ресурсоёмких участках приложения желательно ставить задержку равную секунде ( -d1 ). По умолчанию задержка происходит от 1 секунды до 3. Эта опция позволяет как бы накрывать сервер волнами запросов.
Конфигурационный файл
Начиная с версии 2.00 Siege поддерживает конфигурационные файлы в которых Вы можете хранить часто-используемые команды. Это может помочь при большом количестве тестирований с почти одними и теми же настройками. Данный файл называется .seigerc и располагается в домашней директории пользователя установившего Siege. Если этого файла там нет (например устанавливали программу не Вы) то можно воспользоваться утилитой siege.config для его создания. Внутри файла находятся различные директивы с комментариями к ним. Редактирование Вы можете проводить с использованием любого текстового редактора.
Формат передаваемых URL
Siege понимает следующий формат ссылок:
[протокол://] [сервер.домен.xxx] [: порт] [/диерктория/файл]
Поддерживаются адреса только с протоколами HTTP и HTTPS. Минимум что Вы должны указать – имя сервера. Если Вы находитесь внутри какого-то домена и тестируете сервер с именем shemp, и он прописан в Вашем файле хостов или на местном DNS, тогда команда
“siege -u shemp” произведёт обращение к адресу shemp.домен.net/index.shtml. Если Вы хотите чтоб Siege работал с https-сервером то нужно указать дополнительно ещё и протокол. Таким образом команда “siege -u shemp” заставит программу обращаться по адресу shemp.yourdomain.net/index.shtml.
Файл с сылками
Перед тем как запустить регрессионный тест или режим имитации интернета Вам нужно передать программе список проверяемых адресов. Для этого поместите их в файл SIEGE_HOME/etc/urls.txt. В нём адреса должны располагаться по одному на строку:
homer.whoohoo.com/howto.jsp
homer.whoohoo.com/index.jsp
homer.whoohoo.com/cgi-bin/hello.pl?first=bart&last=simpson
и т.д.
Siege-2.06 и более поздние версии поддерживают наличие POST и GET директив. GET директива используется по умолчанию и указывать её не обязательно. А вот для POST-запроса директиву следует указать. Пример:
homer.whoohoo.com/cgi-bin/hello.pl POST name=homer
homer.whoohoo.com/haha.jsp POST word=doh!&scope=ALL
Когда Вы запускаете программу без опции [ -u URL | --url=URL ], она берёт адреса именно из этого файла. В нормальном режиме Siege начинает с начала файла и постепенно обращается ко всем адресам. Если Вы выбрали режим имитации Интернета [ -i | --internet ], то обращения к адресам происходят случайным образом. Вы можете указать другой путь к файлу с ссылками через опцию [ -f FILE | --file=FILE ].
Переменные
Начиная с релиза версии 2.57, Siege поддерживает объявление переменных в файле .siegerc и в файлах со ссылками ( urls.txt ). Синтаксис объявления переменных Siege похож на синтаксис UNIX shell. Они объявляются по одной на строку в формате “varname=value”
Название переменной помещается внутрь конструкции $() или ${}. Вы можете использовать их например для быстрого переключения между двумя протоколами проверяемых ссылок:
PROT=https://
$(PROT)eos.joedog.org/siege/index.php
$(PROT)eos.joedog.org/wacky/index.php
$(PROT)eos.joedog.org/scout/index.php
$(PROT)eos.joedog.org/libping/index.php
$(PROT)eos.joedog.org/gunner/index.php
В этом примере, для того чтоб сменить протокол всех ссылок, Вам необходимо изменить всего лишь одну строку.
Log File
Когда Siege запускается с включенной опцией логирования [-l/--log], программа заносит всю выводимую информацию в PREFIX/var/siege.log, где PREFIX – установочная директория Siege ( смотрите файл INSTALL ). В лог-файл пишется всё что выводится программой на экран в стандартном режиме. Информация при записи разделяется запятыми для быстрого импорта в другие форматы.
Для разделения результатов разных проверок имеется опция -m “текст”/–mark=”текст”. Она помещает указанное сообщение в лог-файл перед началом сканирования чтоб Вы смогли быстро найти его результат. Например, если Вы тестируете ссылки по протоколам http и https, Вы можете оставлять в логах пометки типа “start HTTPS testing”. Если Вы используйте опцию -m/–mark то параметр -l/–log использовать не обязательно.
Статистика исследования
Статистика, выдаваемая программой, включает в себя общее время тестирования, общее количество переданных данных ( включая заголовки ), среднее время ответа сервера, его пропускную способность и количество обращений на которые сервер ответил кодом 200. Сам отчёт формируется скриптом Линкольна Штейна (Lincoln Stein) torture.pl. Вот пример отчёта Siege:
Ben: $ siege -u shemp.whoohoo.com/Admin.jsp -d1 -r10 -c25
..Siege 2.65 2006/05/11 23:42:16
..Preparing 25 concurrent users for battle.
The server is now under siege…done
Transactions: 250 hits
Elapsed time: 14.67 secs
Data transferred: 448000 bytes
Response time: 0.43 secs
Transaction rate: 17.04 trans/sec
Throughput: 30538.51 bytes/sec
Concurrency: 7.38
Status code 200: 250
Successful transactions: 250
Failed transactions: 0
Здесь:
Transactions – количество обращений к серверу. В примере это число высчитывается из 25 пользователей [ -c25 ] запустивших по 10 обращений [ -r10 ], что в общей сумме составляет 250.
Elapsed time – общая продолжительность тестирования. Она высчитывается начиная с первого обращения к серверу и кончая получением ответа на последний запрос. В примере тест занял 14.67 секунд.
Data transferred – суммарное количество данных переданное всеми имитируемыми пользователями. Оно включает в себя как тела запросов, так и их заголовки.
Response time – среднее время за которое сервер успел ответить клиенту.
Transaction rate – среднее число обращений которые сервер успел обработать за секунду. Оно получается путём деления общего числа запросов на затраченное время.
Throughput – среднее число данных передаваемых ежесекундно от сервера к пользователям.
Concurrency – количество одновременных подключений при которых сервер отвечает без задержек.
Successful transactions – количество запросов на которые сервер ответил кодом меньше 400.
Платформы
Мульти-потоковый Siege был собран и успешно оттестирован на следующих платформах:
* AIX( powerpc-ibm-aix4.2.1.0 ). Siege скомпилирован и успешно протестирован с использованием компилятора “IBM C for AIX” версии 5.
* GNU/Linux ( i[56]86-pc-linux-gnu ). Siege был разработан на SuSE GNU/Linux с gcc.
* HP-UX ( hppa2.0w-hp-hpux11.00 ) Siege был скомпилирован на этой платформе с использованием “HP ANSI C compiler” и gcc.
* Solaris ( sparc-sun-solaris2.[678] ) Siege обожает эту платформу. Она была нормально скомпилирована на ней с использованием gcc.
* Microsoft Windows ( pc-i686-cygwin ) Siege была портирована на Cygwin Funkman`ом. На нём нормально работают все версии Siege после 1.5.
Авторы
Jeffrey Fulmer – Спроектировал и реализовал Siege будучи в должности веб-мастера в компании “Armstrong World Industries”.
Информация о лицензии
Для получения полной информации о лицензии посмотрите файл COPYING. Авторские права полностью принадлежат Джеффри Фалмеру (Jeffrey Fulmer). Каждому разрешается производить и распространять копии этого документа без каких-либо изменений. Разрешено изменение этого документа и распространение его изменённых версий только в случае указания изменённых мест.
Автор перевода — Kuzya