ApacheBench (Apache Bench) представляет собой инструмент, который используется для тестирования веб-сервера по протоколу гипертекстовой передачи (HTTP). Изначально его создали для измерения производительности веб-сервера Apache. Однако впоследствии стали использовать для тестирования других веб-серверов или web-приложений. С помощью этого инструмента можно достаточно быстро узнать, сколько запросов в секунду способен обслуживать Ваш веб-сервер или приложение.
Содержание:
- Основные особенности ApacheBench
- Установка ApacheBench
- Тестирование нагрузки веб-сервера / приложения
- Тестирование нагрузки на приложение
- Выводы
Основные особенности ApacheBench
Начать стоит с того, что ApacheBench имеет ряд преимуществ и недостатков. А именно:
- Он представляет собой программное обеспечение с открытым исходным кодом, поэтому распространяется по бесплатной лицензии.
- Из-за того, что это простая однопоточная программа для командной строки, она не может использовать преимущества многоядерных процессоров, то есть является не масштабируемой.
- Это кроссплатформенный инструмент. Следовательно, его можно использовать как на ОС Linux / Unix, так и на сервере Windows.
- При помощи этой программы можно тестировать нагрузку только веб-серверов 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 — время ожидания.
Чтобы понять, как эти несколько элементов связаны друг с другом, изучим изображение:
Устанавливаем и запускаем gnuplot:
Так как мы работаем в терминале, то графики нам необходимо строить в режиме ASCII. Включаем режим рисования:
Терминал готов к рисованию, построим данные из файла out.data:
Для примера протестируем другой сайт: sedicomm.com.
В результате получаем следующий график:
Тестирование нагрузки на приложение
Чтобы провести тестирование нагрузки, создадим небольшое приложение. Для этого установим менеджер пакетов pip и небольшой web-фреймворк Bottle:
Откроем текстовый редактор:
Напишем web-приложение:
Запускаем приложение:
Пример вывода:
Эти результаты вывода показывают, что наше приложение работает на локальной машине, доступно по всем сетевым интерфейсам по адресу http: //<server-ip> и прослушивает порт 8080.
Давайте теперь протестируем наше приложение, набрав следующую команду:
Пример вывода:
Запустим тест, чтобы построить график нагрузки на приложение:
Информацию о других возможностях команды ab можно получить, введя в командную строку запрос man ab
:
Как видите, ApacheBench имеет много полезных опций для настройки дополнительных параметров запросов и детализации результатов вывода.
Выводы
Мы успешно справились с задачей — научились выполнять тестирование нагрузки с ApacheBench для веб-сервера и приложения. После изучения наших примеров легко понять, что работать с ApacheBench намного проще, чем может показаться на первый взгляд. Надеемся, это руководство было полезным для Вас!
Если возникли вопросы — задавайте их в комментариях.
Подписывайтесь на обновления нашего блога и оставайтесь в курсе новостей мира инфокоммуникаций!
Чтобы знать больше и выделяться знаниями среди толпы IT-шников, записывайтесь на курсы Cisco, курсы по кибербезопасности, полный курс по кибербезопасности, курсы DevNet / DevOps (программируемые системы) от Академии Cisco, курсы Linux от Linux Professional Institute на платформе SEDICOMM University (Университет СЭДИКОММ).
Курсы Cisco, Linux, кибербезопасность, DevOps / DevNet, Python с трудоустройством!
- Поможем стать экспертом по сетевой инженерии, кибербезопасности, программируемым сетям и системам и получить международные сертификаты Cisco, Linux LPI, Python Institute.
- Предлагаем проверенную программу с лучшими учебниками от экспертов из Cisco Networking Academy, Linux Professional Institute и Python Institute, помощь сертифицированных инструкторов и личного куратора.
- Поможем с трудоустройством и стартом карьеры в сфере IT — 100% наших выпускников трудоустраиваются.
- Проведем вечерние онлайн-лекции на нашей платформе.
- Согласуем с вами удобное время для практик.
- Если хотите индивидуальный график — обсудим и реализуем.
- Личный куратор будет на связи, чтобы ответить на вопросы, проконсультировать и мотивировать придерживаться сроков сдачи экзаменов.
- Всем, кто боится потерять мотивацию и не закончить обучение, предложим общение с профессиональным коучем.
- отредактировать или создать с нуля резюме;
- подготовиться к техническим интервью;
- подготовиться к конкурсу на понравившуюся вакансию;
- устроиться на работу в Cisco по специальной программе. Наши студенты, которые уже работают там: жмите на #НашиВCisco Вконтакте, #НашиВCisco Facebook.
1 комментарий. Оставить новый
Спасибо большое за вашу статью , почему может не запускаться команда ab ? терминал быстро открывается и быстро закрывается ?