Apache benchmark from windows

Тестирование производительности веб серверов. Часть первая. Apache Benchmark (ab).

При разработке веб приложений, будь то личные блоги, интернет магазины или многофункциональные порталы, полезно знать, какую нагрузку они смогут выдерживать. Основной задачей любого тестирования производительности сайта является понимание его устойчивости к нагрузкам, которые могут появляться не только из-за большого количества посетителей онлайн, но и являться следствием некорректной настройки сервера, неправильной работы скриптов или действиями злоумышленников (DOS, DDOS). В рамках текущей статьи я познакомлю вас с начальным уровнем тестирования без симуляции поведения реальных пользователей, зато быстрого и дающего общие представления о производительности сайта. Для этого мы будем использовать ab (Apache Benchmark).

Ab — небольшая утилита, входящая в пакет apache2-utils, но предустановленная во многих современных дистрибутивах. Она не требует привилегированного доступа к системе и на фоне более гибких конкурентов крайне неприхотлива. Если в вашей системе ab еще не установлен, самое время сделать это:

Синтаксис работы следующий:

Список всех опций (ключей) будет внизу статьи, а сейчас мы познакомимся с реальными примерами работы утилиты. Самыми важными ключами для любого тестирования являются ключ n — количество запросов страницы и ключ c — количество конкурентных запросов. Запустим утилиту с этими ключами.

После завершения работы утилиты мы увидим подобный вывод:

Рассмотрим вывод построчно:

Server Software — информация о frontend сервере, переданая в http head. Server Hostname — имя тестируемого хоста. Server Port — порт подключения.Document Path — относительный путь без названия хоста. Document Length — длина возвращенного документа.Concurrency Level — количество конкурентных запросов из ключа c. Time taken for tests — время, затраченное на тест. Complete requests — количество выполненных запросов. Если тест прошел без обрывов, значение совпадает с ключом n. Failed requests — количество запросов с ошибками. В рамках теста ошибки разделяются на четыре типа — ошибки соединения, ошибки передачи, ошибки длины возвращенных данных, исключения). Про ошибки длины стоит добавить, что если тестируемая страница меняет свое содержимое при обновлении, т.е. является динамической, добавляйте ключ -l.Write errors — ошибки записи. Сюда также часто сыпятся ошибки Broken pipe. Non-2xx responses — ответы с не 2хх кодами. Т.е. ошибочные либо умышленно, либо в результате проблем на сервере. Total transferred — общий объем переданных данных HTML transferred — объем переданных HTML данных Requests per second — среднее количество обработанных в секунду запросов. Time per request — среднее время обработки запроса. Time per request — среднее время обработки запроса учитывая конекурентность. Transfer rate — скорость передачи данных.Connection Times (ms) — время соединения в миллисекундах Столбцы: min — минимальное время, mean[+/-sd] — среднеквадратическое отклонение, median — среднее время, max — максимальное время. Строки: connect — время соединения с сервером, processing — время обработки запроса, waiting — полное время ожидания, включая processing и время ожидания в очереди, total — общее время выполнения запроса. Percentage of the requests served within a certain time (ms) — доля запросов, выполненных в определенное время. В нашем случае 50% всех запросов было обработано за 19 миллисекунд, а интервал до 27 миллисекунд выолнились все 100% запросов.

Читайте также:  No system disk booting from hard disk start booting from usb device linux

50% 19
66% 20
75% 20
80% 20
90% 24
95% 25
98% 26
99% 27
100% 27 (longest request)

Основными показателями эффективности работы сайта я бы выделил Requests per second, Time per request и не сильный разрыв в графике доль запросов. Важно помнить, что географическая удаленность до сервера играет важную роль при анализе показаний, так что если ваш сервер располагается в дальних и не очень странах, не стоит расстраиваться времени выполнения до 200 мс, главное — отсутствие странных перекосов последней секции. Ниже представлен список поддерживаемых опций ab. Их использование во многом способствует конкретизации тестов, так что не стоит ими пренебрегать.

Стандартный сценарий тестирования — последовательный запуск теста ab с увеличением конкурентных запросов и мониторинг зависимости полученных значений. Если вы хотите просто протестировать работу вашего PHP, достаточно создать файл с содержанием и натравить тест на него. Если при наращивании конкурентных запросов вы получаете ошибку

🐹 CentOS 7: Тест производительности сервера Apache. Утилита Apache Benchmark.

Опубликовано 2019-12-18 · Обновлено 2021-01-30

Содержание:

1. Описание программы.

Важной частью разработки web-приложения является тестирование производительности. Часто при постановке задачи заказчик требует чтобы сервис выдерживал определенную нагрузку. В процессе профилирования и оптимизации полезно отслеживать, как изменилась скорость работы приложения при новых условиях. Для этой цели можно использовать Apache HTTP server benchmarking tool.

AB — это утилита для тестирования производительности вашего веб-сервера Apache. Она создана для того, чтобы вы могли определить производительность вашей текущей настройки Apache. В первую очередь, AB показывает сколько запросов в секунду ваш Apache способен обслужить.

Эта программа подходит и для тестов серверов на других веб-движках, например, Nginx.

2. Установка программы.

Если вы хотите использовать Apache AB, то вам необходимо установить пакет программ httpd:

# yum -y install httpd

Этот пакет содержит полезные утилиты для веб-серверов:

  • abApache benchmark tool;
  • logresolve — разрешает IP-адреса в имена хостов в логах;
  • htpasswd — производит действия над файлами базовой аутентификации;
  • htdigest — действия над аутентификационными файлами в формате digest;
  • dbmmanage — то же для файлов с аутентификационными данными в формате DBM, использует perl;
  • htdbm — то же, что и утилита выше, но использует APR;
  • rotatelogs — периодически прекращает запись в лог-файл и создает новый;
  • split-logfile — делит единый лог-файл, включая множество виртуальных хостов;
  • checkgid — проверяет может ли вызывающий установить gid на определенную группу;
  • check_forensic — извлекает вывод mod_log_forensic из лог-файлов Apache.
Читайте также:  Установка vs code astra linux

Если вы хотите протестировать производительность Apache, или еще какого-нибудь другого движка, с помощью Apache Benchmark на локальной системе, то можно воспользоваться командой вида:

# ab -kc 10 -t 60 http://localhost/

# ab -kc 10 -t 60 https://host.ru/

Эта команда откроет 10 соединений с использованием Keep-Alive и будет нагружать localhost или сайт в течение 60 секунд через эти соединения. Когда процесс завершится, вы получите некоторую информацию о результатах теста. Для получения более правильных результатов лучше воспользоваться утилитой AB с другой машины.

3. Некоторые параметры утилиты AB.

-A auth-username:password — передать данные для базовой аутентификации. То есть, фактически можно тестировать даже если доступ закрыт с помощью базовой аутентификации (htpasswd).

-c concurrency — количество параллельных запросов в единицу времени. По умолчанию, один реквест в единицу времени (можно считать, что в секунду).

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

-f protocol — задает SSL/TLS протокол (SSL2, SSL3, TLS1, or ALL).

-h — отобразить краткую справку по параметрам

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

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

-q — подавляет вывод некоторых сообщений о процессе тестирования.

-t timelimit — максимальное количество секунд, которое необходимо затратить на тестирование. Это подразумевает значение параметра -n равное 50000. По умолчанию временной лимит не установлен.

-v verbosity — устанавливает уровень «разговорчивости»: 4 и выше отображает информацию о заголовках, 3 и выше — информацию о кодах ответа (404, 200 и так далее), 2 и выше — выводить предупреждения и прочую информацию.

-V — отобразить версию и выйти.

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

-x

-attributes — строка для использования в качестве атрибутов для . Атрибуты вставляются .

-y

-attributes — строка атрибутов для .

-z

-attributes — строка атрибутов для .

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

-H — задаем заголовок запроса.

-TContent-type заголовок запроса.

-p — файл содержащий тело POST запроса

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

4. Использование программы.

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

# ab -c 10 -n 6000 http://localhost:8080/

# ab -c 10 -n 6000 http://host.ru:443/

Просто по сайту:

# ab -c 10 -n 100 http://google.com/

# ab -c 10 -n 100 https://8.8.8.8/

4.1. Результат работы программы.

Сначала выводится различная информация о проводимом тесте, такая как типа серверного ПО, хост, порт, путь и так далее.

Дальше идут более интересные характеристики.

Рассмотрим наиболее важные из них:

  • Time taken for tests — суммарное время потраченное на весь тест.
  • Complete requests — количество выполненных запросов.
  • Failed requests — количество запросов завершенных отказом.
  • Total transferred и HTML transferred — суммарный объем и объем html переданные во время теста.
  • Requests per second или rps — количество обрабатываемых запросов в секунду.
  • Time per request — среднее время затраченное на запрос с и без учета распараллеливания.
  • Transfer rate — скорость передачи данных при прохождении теста.

Далее идет таблица с временем затраченным на подключение, обработку запроса и ожидание.

И после этого таблица которая показывает процент от количества запросов, которые успели выполнится за определенный промежуток времени.

5. Практическое применение.

В зависимости от поставленных перед вами задач необходимо задавать различные параметры при запуске теста. Рассмотрим несколько примеров.

5.1. Нагрузочное тестирование.

Тестирование системы при заданной нагрузке. Здесь все просто — указываем заданные значения для параметров -n и -c и запускаем тест. В результате необходимо выяснить загруженность аппаратной части приложения, надёжность работы (количество отказов за заданное время).

5.2. Стресс-тестирование.

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

5.3. Тестирование стабильности.

При данном виде тестирования мы производим длительный тест (время задаем при помощи параметра -t, а количество запросов -n очень большое) и смотрим количество отказов системы. Также полезным будет ознакомится с «разбросом» времени обработки запроса, для того чтобы выяснить не ухудшается ли производительность со временем. Данное значение можно получить из таблицы Connection Times.

6. Пример выполнения POST-запроса в ab.

Для выполнения POST-запроса необходимо составить тело запроса и сохранить его в файл.

Для этого напишем небольшой скрипт:

После этого в файле /tmp/body появится следующее содержимое:

Теперь можно запускать тестирование:

# ab -T application/x-www-form-urlencoded -p /tmp/body -n 10 http://localhost/test/ab/post-handler.php

7. Вывод.

Apache HTTP server benchmarking tool — полезный инструмент web-разработчика, который позволяет максимально быстро произвести тестирование производительности той или иной части приложения. Он отлично подходит для тестирования критических участков и является незаменимым при профилировании и оптимизации web-приложения.

Однако для тестирования нескольких функций с учетом различных сценариев и моделирования действий пользователя, необходимо использовать более сложные системы тестирования.

Читайте также:  Все настольные компьютеры mac os
Оцените статью