Apache Bench - простая утилита для тестирования нагрузки
12 октября 2011 Apache 5 комментариев 21395 просмотров
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.
5 комментариев

Thank you for this article. That's all I can say. You most surely have made this blog into something special. You clearly know what what you are doing, you've covered so many bases. Thanks!

Dura

нельзя тестировать HTTPS

запросы HTTPS можно делать через stunnel An SSL-encrypting socket wrapper. в конифге stunnel.conf в секции [https] указать что -то типа


[https] accept = 127.0.0.1:9999 connect = vash.https-server.com:443 client = yes


а запрос будет выглядеть

ab -n 100 http://localhost:9999/index.html

Спасибо за решение!

А какой формат файла с POST?

Таким способом можно убить же чей-то сайт?