Apache Bench - простая утилита для тестирования нагрузки
12 октября 2011 Apache 22118 просмотров
Apache Bench (ab) - простой инстурмент для тестирования нагрузки веб-сервера. Данная утилита входит в стандартную сборку Apache и даже имеется почти во всех готовых сборках, таких как Denwer, WAMP, XAMPP. Очень проста в использовании и гибко настраиваемая.

Страница с официальной документацией

Главная задача ab - генерировать запросы к указанному URL. Следущая запись производит 10000 последовательных запросов.
ab -n 10000 http://example.com/example.php
Результат будет выглядеть примерно так.
Server Software:        Apache/2.2.14
Server Hostname:        example.com
Server Port:            80
Document Path:          /example.php
Document Length:        68 bytes
Concurrency Level:      1
Time taken for tests:   1.857 seconds
Complete requests:      10000
Failed requests:        0
Write errors:           0
Total transferred:      2790558 bytes
Total POSTed:           13575428
HTML transferred:       680136 bytes
Requests per second:    5383.58 [#/sec] (mean)
Time per request:       1.857 [ms] (mean)
Time per request:       0.186 [ms] (mean, across all concurrent requests)
Transfer rate:          1467.11 [Kbytes/sec] received
                        7137.15 kb/s sent
                        8604.26 kb/s total
Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.2      0       5
Processing:     1    2   0.6      2      11
Waiting:        0    2   0.6      2      11
Total:          1    2   0.6      2      11
Percentage of the requests served within a certain time (ms)
  50%      2
  66%      2
  75%      2
  80%      2
  90%      3
  95%      3
  98%      3
  99%      4
 100%     11 (longest request)
Есть возможность сохранить результат в файл. Следующая команда сохранит его в файл ab_result.
ab -n 10000 http://example.com/example.php > ab_result
Пока у нас запросы отправлялись последовательно. Опция "-c"(concurrency) позволяет задавать количество параллельно выполняющихся запросов, что позволяет сделать тест более валидным.
ab -n 10000 -c 10 http://example.com/example.php > ab_result
ab можно запустить не только из консоли, поэтому предусмотрен вывод результата в HTML формате (опция -w).
ab -n 10000 -c 10 -w http://example.com/example.php
Обычно запросы не приходят пустые, с ними передают POST данные, COOKIE, заголовки. Все это поддерживает ApacheBench. Для передачи заголовка нужно указать опцию "-H".
ab -n 10000 -c 10 -H "Accept: application/json" http://example.com/example.php > ab_result
Передача COOKIE осуществляется опцией "-С" и подразумевает формат ключ=значение.
ab -n 10000 -c 10 -C my_key=my_value http://example.com/example.php > ab_result
Для передачи POST данных необходимо создать файл с этими данными и опцией "-p" указать путь к этому файлу.
ab -n 10000 -c 10 -p path/to/post/file http://example.com/example.php > ab_result
Чтобы отследить, какие заголовки пришли на сервер, какой код ответа был возвращен, какие были ошибки и предупреждения, существует опция "-v"(verbosity) с допустимыми значениями от 1 до 4. Следующий тест будет возвращать в результате код ответа сервера:
ab -n 10000 -c 10 -v 3 http://example.com/example.php > ab_result
Я нашел 2 недостатка в этом инструменте: нельзя тестировать HTTPS, не поддерживает тестирование нескольких URL.