Тестирование нагрузки с ApacheBench для веб-сервера / приложения

Использование ApacheBench для тестирования нагрузки на веб-сервер

Рубрики:

Apache, Linux

Метки:

, , , ,

ApacheBench (Apache Bench) представляет собой инструмент, который используется для тестирования веб-сервера по протоколу гипертекстовой передачи (HTTP). Изначально его создали для измерения производительности веб-сервера Apache. Однако впоследствии стали использовать для тестирования других веб-серверов или web-приложений. С помощью этого инструмента можно достаточно быстро узнать, сколько запросов в секунду способен обслуживать Ваш веб-сервер или приложение.

Содержание:

  1. Основные особенности ApacheBench
  2. Установка ApacheBench
    1. Проверка установки ApacheBench
  3. Тестирование нагрузки веб-сервера / приложения
    1. Расшифровка параметров вывода
    2. Визуализация вывода ApacheBench
      1. Анализ результатов тестирования нагрузки
  4. Тестирование нагрузки на приложение
  5. Выводы

Основные особенности ApacheBench

Начать стоит с того, что ApacheBench имеет ряд преимуществ и недостатков. А именно:

  1. Он представляет собой программное обеспечение с открытым исходным кодом, поэтому распространяется по бесплатной лицензии.
  2. Из-за того, что это простая однопоточная программа для командной строки, она не может использовать преимущества многоядерных процессоров, то есть является не масштабируемой.
  3. Это кроссплатформенный инструмент. Следовательно, его можно использовать как на ОС Linux / Unix, так и на сервере Windows.
  4. При помощи этой программы можно тестировать нагрузку только веб-серверов HTTP или HTTPS.

Установка ApacheBench

Еще одним преимуществом ApacheBench является то, что это автономное приложение. То есть для его использования не нужно устанавливать веб-сервер Apache.

Давайте установим ApacheBench. Сперва обновляем список пакетов в репозиториях:

 

Устанавливаем пакет утилит apache2, чтобы получить доступ к ApacheBench:

Проверка установки ApacheBench

Посмотрим, как проверить установку ApacheBench, для этого выполняем команду:

 

Пример вывода:

 

Важно: ApacheBench следует запускать только на тех серверах, которыми Вы владеете, или на которых у Вас есть явное разрешение на тестирование. В некоторых странах использование ApacheBench без разрешения владельца сервера считаться преступлением и уголовно наказуемо.

Тестирование нагрузки веб-сервера / приложения

Для примера протестируем сайт blog.sedicomm.com. Предположим, мы хотим увидеть, как быстро сервер сможет обработать 100 запросов к sedicomm, если ApacheBench одновременно будет выполнять не более 10 запросов:

 

Пример вывода:

Расшифровка параметров вывода

Чтобы свободно пользоваться ApacheBench, важно понимать, из каких параметров и соответствующих им значений состоят результаты вывода команды ab. Для Вашего удобства мы подготовили следующий список с расшифровкой параметров вывода:

  • Server Software / Серверное программное обеспечение — это название веб-сервера в заголовке HTTP первого успешного возврата.
  • Server Hostname / Имя хоста сервера — это DNS или IP-адрес, указанный в командной строке.
  • Server Port / Порт сервера — это порт, к которому подключается ApacheBench. Если порт не указан в командной строке, то по умолчанию будет установлено значение 80 (для HTTP) и 443 (для HTTPS).
  • SSL / TLS Protocol / Протокол SSL / TLS — протокол, согласованный между клиентом и сервером (если вообще используется SSL).
  • Document Path / Путь документа — это URI запроса из командной строки.
  • Document Length / Длина документа — размер первого успешно возвращенного командой ab документа в байтах (если длина документа изменяется во время тестирования, будет возвращена ошибка).
  • Concurrency Level / Количество параллельных запросов — это число одновременно запущенных во время теста клиентов ApacheBench (эквивалентных отдельным веб-браузерам, совершающих запросы).
  • Time taken for tests / Время, затраченное на тесты — время, затраченное от момента создания первого сокетного соединения до момента получения последнего ответа на запрос команды ab.
  • Complete requests / Выполнено запросов — общее количество полученных успешных ответов на запросы команды ab.
  • Failed requests / Запросы с ошибками — количество запросов, которые были признаны ошибочными (если оно больше нуля, будет выведена строка, показывающая количество запросов, не выполненных из-за подключения, чтения, неправильной длины содержимого или исключений).
  • Total transferred / Всего передано — общий объем переданных по сети данных в байтах.
  • HTML transferred/ Передано HTML — общее количество байтов документа, полученных с сервера (значение исключает байты, полученные в заголовках HTTP).
  • Requests per second/ Количество запросов в секунду — сколько запросов выполнялось за секунду (результат деления количества запросов на общее время тестирования).
  • Time per request / Время на запрос — среднее время, затраченное на один запрос (первое значение — Concurrency Level * Time taken for tests * 1000 / Complete requests; второе значение — Time taken for tests * 1000 / Complete requests).
  • Transfer rate / Скорость передачи — скорость передачи данных, рассчитанная по формуле Total transferred / 1024 / Time taken for tests.

Анализ результатов тестирования нагрузки

Теперь, когда Вы изучили расшифровку параметров вывода команды ab, попробуем проанализировать и понять выводы для нашего теста:

  • Организация использует собственное ПО для веб-сервера — CloudFlare.
  • Сервер прослушивает порт 443 из-за использования HTTPS. Если бы использовался протокол HTTP, то сервер прослушивал бы порт 80 (по умолчанию).
  • Всего передано 398 247 байт за 100 запросов.
  • Тест завершен за 4.442 секунды.
  • Количество неуспешных запросов — 7.
  • Количество запросов в секунду — 22.51, что считается довольно хорошим показателем.
  • Время на запрос — 444.176 мс (для 10 одновременных запросов). Таким образом, суммарно затрачено 44.418 мс (444.176 мс / 10).
  • Скорость передачи данных — 8776.03 [Кбайт/с] получено.

По результатам анализа статистики времени соединения можно заметить, что многим запросам приходилось ждать обработки несколько секунд. Это может быть связано с тем, что веб-сервер помещает запросы в очередь ожидания.

Таким образом мы узнали, что сервер возвращал запросы со скоростью 22.51 запросов в секунду, самый быстрый запрос составлял 40 мс, самый медленный — 2657 мс.

Визуализация вывода ApacheBench

Далее посмотрим, как запросы распределяются по времени. Для визуализации результатов будем использовать опцию -g, после нее укажем имя файла, в который запишем результаты тестирования:

 

Посмотрим содержимое файла out.data:

 

Пример вывода:

 

Теперь разберемся с заголовками столбцов в файле out.data:

  • starttime — это дата и время начала запроса;
  • seconds — время начала запроса, но уже в формате отметки времени Unix (date -d @ 1654787134 возвращает значение, соответствующее starttime);
  • ctime — время на установку соединения;
  • dtime — время на обработку;
  • ttime — общее время (ttime = ctime + dtime);
  • wait — время ожидания.

Чтобы понять, как эти несколько элементов связаны друг с другом, изучим изображение:

Тестирование нагрузки с ApacheBench для веб-сервера / приложения

Устанавливаем и запускаем gnuplot:

 

Так как мы работаем в терминале, то графики нам необходимо строить в режиме ASCII. Включаем режим рисования:

 

Терминал готов к рисованию, построим данные из файла out.data:

 

Тестирование нагрузки с ApacheBench для веб-сервера / приложения

Для примера протестируем другой сайт: sedicomm.com.

 

В результате получаем следующий график:

Тестирование нагрузки с ApacheBench для веб-сервера / приложения

Тестирование нагрузки на приложение

Чтобы провести тестирование нагрузки, создадим небольшое приложение. Для этого установим менеджер пакетов pip и небольшой web-фреймворк Bottle:

 

Откроем текстовый редактор:

 

Напишем web-приложение:

 

Запускаем приложение:

 

Пример вывода:

 

Эти результаты вывода показывают, что наше приложение работает на локальной машине, доступно по всем сетевым интерфейсам по адресу http: //<server-ip> и прослушивает порт 8080.

Тестирование нагрузки с ApacheBench для веб-сервера / приложения

Давайте теперь протестируем наше приложение, набрав следующую команду:

 

Пример вывода:

 

Запустим тест, чтобы построить график нагрузки на приложение:

 

Тестирование нагрузки с ApacheBench для веб-сервера / приложения

Информацию о других возможностях команды ab можно получить, введя в командную строку запрос man ab:

 

Как видите, ApacheBench имеет много полезных опций для настройки дополнительных параметров запросов и детализации результатов вывода.

Выводы

Мы успешно справились с задачей — научились выполнять тестирование нагрузки с ApacheBench для веб-сервера и приложения. После изучения наших примеров легко понять, что работать с ApacheBench намного проще, чем может показаться на первый взгляд. Надеемся, это руководство было полезным для Вас!

Если возникли вопросы — задавайте их в комментариях.

Подписывайтесь на обновления нашего блога и оставайтесь в курсе новостей мира инфокоммуникаций!

Чтобы знать больше и выделяться знаниями среди толпы IT-шников, записывайтесь на курсы Cisco, курсы по кибербезопасности, полный курс по кибербезопасности, курсы DevNet / DevOps (программируемые системы) от Академии Cisco, курсы Linux от Linux Professional Institute на платформе SEDICOMM University (Университет СЭДИКОММ).

Курсы Cisco, Linux, кибербезопасность, DevOps / DevNet, Python с трудоустройством!

Спешите подать заявку! Группы стартуют 25 января, 26 февраля, 22 марта, 26 апреля, 24 мая, 21 июня, 26 июля, 23 августа, 20 сентября, 25 октября, 22 ноября, 20 декабря.
Что Вы получите?
  • Поможем стать экспертом по сетевой инженерии, кибербезопасности, программируемым сетям и системам и получить международные сертификаты Cisco, Linux LPI, Python Institute.
  • Предлагаем проверенную программу с лучшими учебниками от экспертов из Cisco Networking Academy, Linux Professional Institute и Python Institute, помощь сертифицированных инструкторов и личного куратора.
  • Поможем с трудоустройством и стартом карьеры в сфере IT — 100% наших выпускников трудоустраиваются.
Как проходит обучение?
  • Проведем вечерние онлайн-лекции на нашей платформе.
  • Согласуем с вами удобное время для практик.
  • Если хотите индивидуальный график — обсудим и реализуем.
  • Личный куратор будет на связи, чтобы ответить на вопросы, проконсультировать и мотивировать придерживаться сроков сдачи экзаменов.
  • Всем, кто боится потерять мотивацию и не закончить обучение, предложим общение с профессиональным коучем.
А еще поможем Вам:
  • отредактировать или создать с нуля резюме;
  • подготовиться к техническим интервью;
  • подготовиться к конкурсу на понравившуюся вакансию;
  • устроиться на работу в Cisco по специальной программе. Наши студенты, которые уже работают там: жмите на #НашиВCisco Вконтакте, #НашиВCisco Facebook.
Чтобы учиться на курсах Cisco, Linux LPI, кибербезопасность, DevOps / DevNet, Python, подайте заявку или получите бесплатную консультацию.

Рубрики:

Apache, Linux

Метки:

, , , ,

Больше похожих постов

1 комментарий. Оставить новый

  • Спасибо большое за вашу статью , почему может не запускаться команда ab ? терминал быстро открывается и быстро закрывается ?

    Ответить

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Заполните поле
Заполните поле
Пожалуйста, введите корректный адрес email.
Вы должны согласиться с условиями для продолжения


Поиск по сайту
Лучшее
Популярное
Рубрики
Меню