Нагрузочное тестирование: ApacheBench, httperf и siege

Какое количество посетителей одновременно выдержит ваш сайт и сервер? При каком количестве посетителей скорость работы сайта начнет уменьшаться? Если вы задавались такими вопросами, то этот материал будет полезен для вас.

В первой части статьи мы рассмотрим консольные утилиты для нагрузочного тестирования. Это ApacheBench, httperf и siege.

ApacheBench

ApacheBench (более распространенное название - ab) - это однопоточное консольное приложение, которое используется для измерения производительности веб-сервера. Оно входит в состав дистрибутива веб-сервера Apache, так как изначально было разработано для тестирования самого Apache.

Установка рассмотрена в статье, которую вы найдете в нашей Энциклопедии хостинга.

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

ab -n 100 -c 10 http://<доменное имя сайта>/index.php

Это равносильно 100 запросам от 10 посетителей одновременно. После окончания тестирования будет выведена результирующая информация:

Server Software:        nginx
Server Hostname:     sabini.ch
Server Port:               80
Document Path:          /index.php
Document Length:        37983 bytes
Concurrency Level:      10
Time taken for tests:    14.296 seconds
Complete requests:      100
Failed requests:            0
Write errors:                 0
Total transferred:          3854700 bytes
HTML transferred:       3798300 bytes
Requests per second:    6.99 [#/sec] (mean)
Time per request:       1429.629 [ms] (mean)
Time per request:       142.963 [ms] (mean, across all concurrent requests)
Transfer rate:          263.31 [Kbytes/sec] received
Connection Times (ms)
             min  mean[+/-sd] median   max
Connect:        0    0   0.1      0       1
Processing:   134 1389 771.7   1332    7469
Waiting:      130 1299 446.2   1322    3072
Total:        135 1389 771.7   1333    7469
Percentage of the requests served within a certain time (ms)
 50%   1333
 66%   1476
 75%   1521
 80%   1621
 90%   1733
 95%   2080
 98%   3188
 99%   7469
100%   7469 (longest request)

Внимание следует обратить на строки:

  • Time taken for tests:   14.296 seconds – время выполнения процедуры тестирования
  • Complete requests:      100 – количество запросов, на которые получен ответ
  • Failed requests:        0 – количество запросов, на которые не получили ответа
  • Requests per second:    6.99 [#/sec] (mean) – количество запросов в секунду
  • Time per request:       1429.629 [ms] (mean) – количество времени (в миллисекундах), потраченное на запрос
  • Time per request:       142.963 [ms] (mean, across all concurrent requests) – количество времени (в миллисекундах), потраченное на запрос, учитывая все параллельные запросы

Официальный сайт: http://httpd.apache.org/docs/2.2/programs/ab.html

HTTPERF

Еще одно консольное приложение, используемое также для создания нужного количества параллельных запросов родилась в недрах компании HP - httperf.

Его отличие от ab в том, что httperf посылает запросы согласно своим настройкам, невзирая на то, отвечает сервер на них или уже нет. Таким образом можно определить не только какую максимальную нагрузку может выдержать сервер, но и как будет себя вести сервер в момент, когда нагрузка достигла своего пика.

О том, как установить httperf и более детальное описание работы с ним, можно прочитать в нашей Энциклопедии хостинга.

Как и с первой утилитой в качестве тестирования запустим 100 запросов от 10 посетителей параллельно:

httperf --port 80 --server <domain> --uri=/ --num-conns=100 --rate=10

по истечении времени тестирования выводится такая суммарная статистика:

Total: connections 100 requests 100 replies 100 test-duration 13.255 s
Connection rate: 7.5 conn/s (132.5 ms/conn, <=28 concurrent connections)
Connection time [ms]: min 134.6 avg 1864.1 max 4052.0 median 1925.5 stddev 1151.9
Connection time [ms]: connect 0.2
Connection length [replies/conn]: 1.000
Request rate: 7.5 req/s (132.5 ms/req)
Request size [B]: 62.0
Reply rate [replies/s]: min 7.4 avg 7.4 max 7.4 stddev 0.0 (2 samples)
Reply time [ms]: response 1782.8 transfer 81.0
Reply size [B]: header 621.0 content 37711.0 footer 2.0 (total 38334.0)
Reply status: 1xx=0 2xx=100 3xx=0 4xx=0 5xx=0
CPU time [s]: user 1.59 system 11.68 (user 12.0% system 88.2% total 100.1%)
Net I/O: 282.9 KB/s (2.3*10^6 bps)
Errors: total 0 client-timo 0 socket-timo 0 connrefused 0 connreset 0
Errors: fd-unavail 0 addrunavail 0 ftab-full 0 other 0

Рассмотрим этот отчет по тем же данным, что и отчет ab.

  • Total: connections 100 requests 100 replies 100 test-duration 13.255 s – общее количество запросов и ответов, а также время всей процедуры тестирования
  • Request rate: 7.5 req/s (132.5 ms/req) – количество запросов в секунду и количество времени (в миллисекундах) на запрос

Официальный сайт: http://www.hpl.hp.com/research/linux/httperf/

 

SIEGE

В заключение рассмотрим инструмент под названием siege. На мой взгляд, он объединяет все сильные стороны предыдущих утилит. Но в то же время отсутствие некоторых ключей запуска усложняет быстрый запуск и тестирование.

Из интересных параметров - возможность симулирования реального пользователя, который переходит со страницы на страницу и делает запросы с неравномерными интервалами.

Siege кроссплатформенный и согласно официальному сайту вполне может работать не только под FreeBSD или Linux, но и под Windows.

Установка не сложная. Под всеми известными дистрибутивами Siege есть в репозитариях. Мы также рассмотрели установку, настройку и использование более подробно в статье на Энциклопедии хостинга.

По умолчанию, siege использует 10 одновременных подключений для запросов. Количество запросов не лимитируется, но можно задавать время в течение которого выполнять тестирование

siege  -t60S -b http://sabini.ch

В конце тестирования будет выведен отчет похожего содержания

Lifting the server siege...      done.
Transactions:                    421 hits
Availability:                 100.00 %
Elapsed time:                  59.56 secs
Data transferred:               3.81 MB
Response time:                  1.53 secs
Transaction rate:               7.07 trans/sec
Throughput:                     0.06 MB/sec
Concurrency:                   10.83
Successful transactions:         421
Failed transactions:               0
Longest transaction:            5.02
Shortest transaction:           0.13
FILE: /home/vadim/siege.log
You can disable this annoying message by editing
the .siegerc file in your home directory; change
the directive 'show-logfile' to false.

Официальный сайт: http://www.joedog.org/siege-home/

Автор статьи:

Сабынич Вадим

Аватар пользователя vadim s. sabinich
Вернуться