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

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

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

Установка

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

apt-get install apache2-utils

Параметры

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

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

Давайте выполним тестирование какого-либо сайта и рассмотрим содержание отчета, который генерирует 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)

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

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

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

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

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

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

<?php
$params = array('test1' => 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-приложения. Однако для тестирования нескольких функций с учетом различных сценариев и моделирования действий пользователя, необходимо использовать более сложные системы тестирования.

UPDATE #1

Полезное дополнение от товарища:

ApacheBenchmark выдает много Failed. Сначала было стремно, но все оказалось не так страшно :) [#apache][] stackoverflow.com/questions/5794…

— Pugach Vitaliy (@lionasp) March 16, 2012