Приложения для нагрузочного тестирования

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

Приложение Siege Benchmarking Tool

Siege — это консольное мультипотоковое приложение для нагрузочного тестирования сайтов и серверов. Является мультиплатформенным и доступно под всеми современными ОС.  Автор Siege — Джеффри Фалмер.

Установка

CentOS

Добавляем сторонний репозиторий epel:

yum install epel-release

После устанавливаем Siege:

 yum install siege

Debian/Ubuntu

Обновляем список доступных пакетов и репозиториев:

apt update

Устанавливаем Siege:

apt install siege

Параметры запуска

Формат запуска Siege такой:

siege <параметры>

Программа может принимать следующие параметры:

'-V' — вывод на экран текущей версии.

'-h' — вывод справочной информации.

'-С' — показывает текущую конфигурацию. Вы можете их менять в файле ~/.siegerc.

'-v ' — подробный вывод информации. Если этот ключ указан, то Siege будет выводить на экран детальную информацию обо всех обращениях к серверу, а именно: тип HTTP-протокола, код ответа и адрес обращения. Пример:

HTTP/1.1 200 OK: /cgi-bin/whoohoo.cgi?first=Homer&last=simpson

Эта опция особенно полезна в случае регрессионного тестирования или имитации Интернета, когда программа обращается в широкому кругу адресов.

'-g URL'  — совершает обращение к указанной ссылке. Получает заголовки с сервера и выводит их на экран. Отличный инструмент для точечного тестирования.

'-c NUM '  — количество имитируемых пользователей. Опция позволяет производить тестирование веб-сервера с количеством одновременных пользователей указанных в NUM. Фактически это число ограничивается лишь ресурсами компьютера, но на практике для хорошего результата требуется имитировать всего пару сотен пользовательских сессий.

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

'-i ' — эта опция используется с конфигурационным файлом, содержащим множество ссылок. При её включении Siege случайно выбирает адреса обращений и производит к ним запросы. В реальности вы не можете сказать пользователям, на какие страницы и в какой последовательности они должны заходить. Они будут делать это всегда по-разному. Режим имитации Интернета пытается эмулировать такое поведение. Обратите внимание на то, что в процессе тестирования к некоторым адресам из файла может не произойти обращений вообще, ведь они выбираются случайно.

'-t NUMm ' — время, за которое должно пройти тестирование. Указывается в формате «NUMm», где NUM — это количество единиц времени, а «m» — это модификатор S, M, или H для секунд, минут и часов соответственно. Например, для того чтоб запустить тестирование на час вы можете воспользоваться следующими комбинациями: -t3600S, -t60M, -t1H. Модификатор не чувствителен к регистру, но между ним и числом не должно быть пробелов.

'-f FILE ' — конфигурационный файл, содержащий ссылки (SIEGE_HOME/etc/urls.txt). Вы можете использовать эту опцию для того, чтобы указывать другой путь к нему. Например: siege –file=serverb.txt

'-l’ — эта опция указывает Siege, что она должна записывать всю информацию в лог-файл SIEGE_HOME/var/siege.log. При каждом новом тестировании файл будет дописан.

'-m MESSAGE ' — эта опция позволяет указать выражение, которым будут разделяться записи о разных тестированиях в лог-файле. Вместе с ней не обязательно использовать опцию -l, т.к. она будет включена автоматически. Если выражение в MESSAGE содержит пробелы, не забудьте поместить его в кавычки.

'-d NUM ' — эта опция указывает задержку между обращениями имитируемых пользователей к серверу. Время задержки вычисляется от единицы до введённого числа. При проведении тестирования на ресурсоёмких участках приложения желательно  ставить задержку, равную секунде ( -d1 ). По умолчанию задержка происходит от 1 секунды до 3. Эта опция позволяет как бы накрывать сервер волнами запросов.          

Конфигурационный файл

Если вы часто проводите тестирование с практически одинаковыми параметрами, можно использовать конфигурационный файл. Создается он командой siege.config и располагается в корневой директории пользователя ~/.siegerc. Сам конфигурационный файл хорошо прокомментирован.

Примеры запуска

siege -c10 -t60S -b http://domen.ru

Имитирует подключение 10 пользователей к сайту в течение одной минуты. Запросы будут идти даже в случае отсутствия ответов с сервера.

Статистика тестирования

Из всего вывода статистики следует обратить внимание эти пункты:

  • Transactions – количество обращений к серверу от всех пользователей.
  • Elapsed time – общая продолжительность тестирования с момента первого запроса к серверу и до последнего ответа на последний запрос.
  • Data transferred – суммарное количество данных, переданное всеми имитируемыми пользователями. Оно включает в себя как тела запросов, так и их заголовки.
  • Response time – среднее время, за которое сервер успел ответить клиенту.
  • Transaction rate – среднее число обращений, которые сервер успел обработать за секунду. Оно получается путём деления общего числа запросов на затраченное время.
  • Throughput – среднее количество данных, передаваемых ежесекундно от сервера к пользователям.
  • Concurrency – количество одновременных подключений, при которых сервер отвечает без задержек.
  • Successful transactions – количество запросов на которые сервер ответил.

Приложение для нагрузочного тестирования ApacheBench

Утилита ab входит в состав дистрибутива веб-сервера Apache. Если на сервере не установлен этот веб-сервер, то потребуется установить только один пакет, входящий в дистрибутив — httpd-tools.

Установка

CentOS

# yum install httpd-tools

Debian/Ubuntu

# apt update
# apt install apache2-utils

Описание параметров командной строки

Запуск тестирования ApacheBench выполняется в формате:

ab <опции> <url> 

В качестве опций и параметров команда ab принимает следующие ключи:

-A auth-username:password — простая авторизация, разделителем авторизационных данных является символ двоеточия. Отсылаться данные должны зашифрованные в base64. Строка будет отправлена независимо от того, требуется ли она серверу.

-b windowsize — размер TCP-буфера отправки/получения, в байтах.

-c concurrency — количество одновременных запросов. По умолчанию это один запрос.

-C cookie-name=value — добавить строку Cookie к запросу. Обычно значение идет в форме пары имя=значение. Это поле может повторяться.

-s timeout — количество секунд до максимального ожидания каждого ответа. По умолчанию 30 секунд.

-d — не отображать таблицу с процентами отклика серверов в милисекундах.

-e csv-file — разделенный запятыми файл значений (CSV), который содержит для каждого процента (от 1% до 100%) время (в миллисекундах), необходимое для обслуживания этого процента запросов. Обычно это более удобно, чем файл в формате «gnupilot», поскольку все результаты уже упорядочены.

-f protocol — возможность указать SSL/TLS-протокол (SSL2, SSL3, TLS1 или ALL).

-g gnuplot-file — запись данных в файл формата «gnupilot» (TSV, разделенных табуляцией). Этот файл удобно импортировать в такие программы как Gnupilot, IDL, Mathematica, Igor или даже Excel. Первой строкой в файле идут названия значений.

-h — вывод справочной информации.

-H custom-header — указать дополнительные заголовки к запросу. Обычно содержит разделенную двоеточием пару «поле»-«значение» (например, Accept-Encoding: zip/zop;8bit).

-i — выполнять запросы HEAD вместо GET.

-k — включить возможность HTTP KeepAlive, например, для вызова множества запросов в одной HTTP-сессии. По умолчанию отключено.

-n requests — количество запросов, которые необходимо выполнить. По умолчанию выполняется только один запрос, который обычно приводит к нерепрезентативным результатам бенчмаркинга.

-t timelimit —  максимальное количество времени для проверки. По умолчанию ограничение отсутствует.

-T content-type — заголовок содержимого для использования POST/PUT данных,например, application/x-www-form-urlencoded. По умолчанию: text/plain.

-u PUT-file — файл, содержащий данные для PUT-запроса. Не забудьте также указать параметр -T.

-v verbosity — уровень подробности лог-файла. При 4 и выше выводится информация о заголовках, 3 и выше — коды ответов, 2 и выше — предупреждения и другая информация.

-V — вывод номера версии и выход.

-w — вывод результатов в HTML-таблице. По умолчанию таблица выводится в две колонки и с белым фоном.

-x-attributes — строка для вставки в качестве атрибутов таблицы.

-X proxy[:port] — использовать прокси-сервер для отправки запросов.

-y <tr>-attributes — строка для использования в теге <tr> при построении HTML-отчета.

-z <td>-attributes — строка для использования в теге <td> при построении HTML-отчета.

-Z ciphersuite — установка SSL/TLS циферной пары.

Приложение для тестирования wrk2

Wrk2 — это многопоточный инструмент для тестирования HTTP, способный производить нагрузку с заданной частотой запросов и предоставлять подробную статистику задержек.

Установка

CentOS

yum -y groupinstall 'Development Tools'
yum -y install openssl-devel git zlib-devel
git clone https://github.com/giltene/wrk2.git
cd wrk2
make
cp wrk /usr/local/bin

Ubuntu/Debian

apt-get update
apt-get install -y build-essential libssl-dev git zlib1g-dev
git clone https://github.com/giltene/wrk2.git
cd wrk2
make
cp wrk /usr/local/bin

Параметры запуска

Формат использования команды:

wrk2 <опции> <url>

Опции

-c, —connections <N> — количество соединений, которые нужно держать открытыми

-d, —duration <T> — продолжительность теста.

-t, —threads <N> — количество используемых потоков.

-s, —script <S> — загрузить файл сценария Lua.

-H, —header <H> — добавить заголовок к запросу.

-L —latency — вывести статистику задержки.

-U, —u_latency — вывести некорректную статистику задержки.

-timeout <T> — время ожидания сокета/запроса.

-B, —batch_latency — измерить задержку целых пакетов конвейерных операций (в отличие от каждой операции).

-v, —version — показать сведения о версии.

-R, —rate <T> — скорость работы (пропускная способность) в запросах/сек (всего). Обязательный параметр.

Пример запуска тестирования

wrk  -t4 -c100  -d30s  -R1000  -L http://127.0.0.1:8080/index.html

Данная команда запускает тест в течение 30 секунд, в 4 потока, сохраняя открытыми 100 HTTP-соединений с постоянной пропускной способностью 1000 запросов в секунду и выводя подробную информацию о процентах задержки.

Этот материал был полезен?