Apache Benchmark

ApacheBench - тест производительности сервера

Что такое Apache Benchmark/ApacheBench/AB?

ApacheBench (ab) - это утилита командной строки для проведения нагрузочного тестирования веб-серверов. Она разработана для Apache HTTP Server, но может использоваться для тестирования любого веб-сервера, который поддерживает HTTP-протокол.

Основные функции AB

  • Проведение нагрузочного тестирования: ab позволяет имитировать множество одновременных запросов к веб-серверу, чтобы оценить его производительность под нагрузкой.
  • Измерение времени отклика: ab измеряет время отклика сервера на запросы, что позволяет оценить скорость обработки запросов.
  • Определение пропускной способности: ab может определить максимальную пропускную способность сервера, то есть количество запросов, которые он может обрабатывать в секунду.
  • Анализ ошибок: ab может обнаруживать и анализировать ошибки, которые возникают во время тестирования, чтобы помочь выявить проблемы в работе веб-сервера.

Пример использования

ab -n 1000 -c 100 -t 60 http://localhost:8080/

Предположим, вы хотели протестировать одновременно несколько URL-адресов. Вы можете сделать это, создав сценарий оболочки с несколькими вызовами ab. В конце каждой строки укажите &, что укажет команде запускаться в фоновом режиме. Вы также захотите перенаправить вывод в файл для каждого URL, используя > filename.

ab -n 1000 -c 100 -t 60 http://localhost:8080/ > localhost8080.txt &
ab -n 1000 -c 100 -t 60 http://localhost:5050 > localhost5050.txt &
Основные параметры ApacheBench
  • -A auth-username:password - передать данные для базовой аутентификации.
  • -n: Количество запросов для выполнения.
  • -c: Количество одновременных запросов.
  • -t: Время выполнения теста в секундах.
  • -r: Запускает тест до тех пор, пока не будет получено нужное количество успешных запросов.
  • -s: Устанавливает время задержки между запросами.
  • -k: Включает keep-alive соединения.
  • -С cookie-name=value - добавлять куки. Задается в виде пары имя=значение. Это поле можно повторять.
  • -f protocol - задает SSL/TLS протокол (SSL2, SSL3, TLS1, or ALL).
  • -h - отобразить краткую справку по параметрам
  • -k - включить KeepAlive, то есть осуществлять множество запросов в течение одной HTTP-сессии.
  • -q - подавляет вывод некоторых сообщений о процессе тестирования.
  • -v verbosity - устанавливает уровень “разговорчивости”: 4 и выше отображает информацию о заголовках, 3 и выше - информацию о кодах ответа (404, 200 и т. д.), 2 и выше - выводить предупреждения и прочую информацию.
  • -V - отобразить версию и выйти.
  • -w - вывести результаты в виде HTML-таблицы. По умолчанию таблица состоит из двух колонок с белым фоном.
  • -X proxy[:port] - использовать прокси-сервер для запросов.

С полным набором параметров можно ознакомиться выполнив команду man ab в командной строке.

Понимание выходных значений

Нам нужно понимать различные метрики, чтобы понимать различные выходные значения, возвращаемые ab.

  • Серверное программное обеспечение — это имя веб-сервера, возвращаемое в заголовке HTTP первого успешного возврата.
  • Имя хоста сервера — это DNS или IP-адрес, указанный в командной строке.
  • Порт сервера — это порт, к которому подключается ab. Если порт не указан в командной строке, по умолчанию будет установлено значение 80 для http и 443 для https.
  • Протокол SSL / TLS — это параметр протокола, согласованный между клиентом и сервером. Это будет напечатано, только если используется SSL.
  • Путь документа — это URI запроса, проанализированный из строки командной строки.
  • Длина документа — это размер в байтах первого успешно возвращенного документа.Если длина документа изменяется во время тестирования, ответ считается ошибкой.
  • Уровень параллелизма — это количество одновременных клиентов (эквивалентных веб-браузерам), использованных во время теста.
  • Время, затраченное на тесты — это время, затрачиваемое с момента создания первого сокетного соединения до момента получения последнего ответа.
  • Выполнено запросов — количество полученных успешных ответов.
  • Failed Requests — количество запросов, которые были признаны ошибочными. Если число больше нуля, будет напечатана другая строка, показывающая количество запросов, которые не были выполнены из-за подключения, чтения, неправильной длины содержимого или исключений.
  • Всего перенесено — общее количество байтов, полученных с сервера. Это число по сути количество байтов, отправленных по проводам.
  • Переданный HTML — общее количество байтов документа, полученных с сервера. Это число исключает байты, полученные в заголовках HTTP
  • Количество запросов в секунду — это количество запросов в секунду. Это значение является результатом деления количества запросов на общее время.
  • Время на запрос — среднее время, затраченное на запрос. Первое значение рассчитывается по формуле параллелизма * timetaken * 1000 / done, а второе значение рассчитывается по формуле timetaken * 1000 / done.
  • Скорость передачи — скорость передачи, рассчитанная по формуле totalread / 1024 / timetaken.
Преимущества ApacheBench
  • Простота использования: ab очень прост в использовании и не требует установки дополнительных библиотек.
  • Быстрая настройка: ab позволяет легко настроить параметры теста и начать тестирование.
  • Доступность: ab входит в состав большинства дистрибутивов Linux и доступен для других операционных систем.
Недостатки ApacheBench
  • Ограниченные возможности: ab предоставляет базовые функции для нагрузочного тестирования и может не удовлетворить все требования.
  • Негибкий сценарий: ab не позволяет выполнять сложные сценарии тестирования с использованием множества разных запросов.

ApacheBench является хорошим инструментом для проведения базовых тестов производительности веб-сервера, но для более сложных сценариев тестирования может потребоваться использовать специализированные инструменты, такие как JMeter или Gatling.

Полезные ссылки