Важной частью разработки 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/