Используем ab для тестирования производительности web-приложения

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

Использование ab

Установка

Для того чтобы установить ab в debian необходимо установить пакет apache2-utils:

apt-get install apache2-utils

Параметры

Утилита запускается с помощью команды ab. Далее рассмотрим основные параметры.

  • -c — очень важный параметр. Определяет количество параллельных запросов отправляемых одновременно
  • -n — количество отправляемых запросов
  • -t — максимальное количество секунд отведенное на тест. Подходит для тестирования приложения в течении определенного временного промежутка. При этому необходимо задать большое значение параметру -n
  • -C cookie-name=value — добавляем cookie в каждый запрос к серверу
  • -H — задаем заголовок запроса
  • -T — Content-type заголовок запроса
  • -p — файл содержащий тело POST запроса

Выполнение теста

Давайте выполним тестирование какого-либо сайта и рассмотрим содержание отчета, который генерирует ab.

ab -c 10 -n 100 http://google.com/
Benchmarking google.com (be patient).....done

Server Software:        gws
Server Hostname:        google.com
Server Port:            80

Document Path:          /
Document Length:        219 bytes

Concurrency Level:      10
Time taken for tests:   1.290 seconds
Complete requests:      100
Failed requests:        0
Write errors:           0
Non-2xx responses:      100
Total transferred:      54000 bytes
HTML transferred:       21900 bytes
Requests per second:    77.51 [#/sec] (mean)
Time per request:       129.018 [ms] (mean)
Time per request:       12.902 [ms] (mean, across all concurrent requests)
Transfer rate:          40.87 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:       54   56   2.0     55      63
Processing:    70   72   2.4     72      82
Waiting:       70   72   2.3     72      82
Total:        124  128   3.4    127     140

Percentage of the requests served within a certain time (ms)
  50%    127
  66%    128
  75%    129
  80%    130
  90%    133
  95%    134
  98%    138
  99%    140
 100%    140 (longest request)

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

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

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

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

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

  • Нагрузочное тестирование. Тестирование системы при заданной нагрузке. Здесь все просто — указываем заданные значения для параметров -n и -c и запускаем тест. В результате необходимо выяснить загруженность аппаратной части приложения, надёжность работы (количество отказов за заданное время).
  • Стресс-тестирование. Определение максимальной нагрузки при которой сервер остается работоспособным, а также выявление последствий нагрузки превышающей ожидаемую. В данном случае вам необходимо выполнить несколько итераций запуска тестов, постепенно наращивая количество параллельных запросов и количество пакетов. Данный цикл необходимо продолжать пока вы не начнете получать значительный для вас процент отказов (или не положите сервер ;)). Наиболее важными, на мой взгляд, в данном случае являются такие показатели, как количество запросов в секунду и время потраченное на 1 запрос, а также процент отказов.
  • Тестирование стабильности. При данном виде тестирования мы производим длительный тест (время задаем при помощи параметра -t, а количество запросов -n очень большое) и смотрим количество отказов системы. Также полезным будет ознакомится с «разбросом» времени обработки запроса, для того чтобы выяснить не ухудшается ли производительность со временем. Данное значение можно получить из таблицы Connection Times.

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

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

 1, 'test2' => 'Second test');
$body = http_build_query($params);
file_put_contents('/tmp/body', $body);

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

test1=1&test2=Second+test

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

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

Вывод

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

Источник : http://dizballanze.com/Linux/ispolzuem-ab-dlia-testirovaniia-proizvoditelnosti-web-prilozheniia/

Запись опубликована в рубрике *HTTP, *Unix,*Linux. Добавьте в закладки постоянную ссылку.

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

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

Я не спамер This plugin created by Alexei91