Dutchakdev

Code, hacks and Rock and Roll.

Обзор Benchmark Tools

| Comments

Решил рассказать о тулзах для тестирования нагрузки которые я использую в работе. Сейчас конкретно пойдет речь о измерении производительности HTTP веб-серверов. Это не совсем обзор, скорее поверхносный, и представлю лишь 3 тулзы.

AB

Однопоточная программа для командной строки, использующаяся для измерения производительности HTTP веб-серверов. Изначально разработанная для тестирования HTTP-сервера Apache, в основном подходит для тестирования любого веб-сервера.

Если нужен простой тест по нагрузке определенной страницы (или списка) достаточно использовать ее.

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

1
$ ab -n 1000 -c 10 http://domain.com/

Сделает 1000 HTTP GET запросов, обработка до 10 запросов одновременно, к указанному URL.

Получим примерно такой отчетик:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
Server Software:        nginx
Server Hostname:        domain.com
Server Port:            80

Document Path:          /
Document Length:        5 bytes

Concurrency Level:      10
Time taken for tests:   26.134 seconds
Complete requests:      1000
Failed requests:        0
Write errors:           0
Total transferred:      146000 bytes
HTML transferred:       5000 bytes
Requests per second:    38.26 [#/sec] (mean)
Time per request:       261.342 [ms] (mean)
Time per request:       26.134 [ms] (mean, across all concurrent requests)
Transfer rate:          5.46 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:      111  141 175.4    115    2328
Processing:   112  118  29.8    116     598
Waiting:      112  117   3.0    116     130
Total:        223  259 178.0    232    2445

Percentage of the requests served within a certain time (ms)
  50%    232
  66%    234
  75%    235
  80%    236
  90%    240
  95%    243
  98%   1299
  99%   1367
 100%   2445 (longest request)

Siege

Siege умеет выполнять многопоточное нагрузочное тестирование web-серверов по протоколу HTTP (S)/1.0/1.1 методами GET и POST. Утилита симулирует параллельные запросы к веб-серверу на протяжении заданного времени и в конце теста вычисляет следующие показатели:

  • среднее количество транзакций, которые сервер смог обрабатывать одновременно.
  • среднее время, потребовавшееся серверу для ответа;
  • среднее количество транзакций в секунду;
  • длительность самой долгой и самой быстрой транзакций;
  • объём переданных данных и скорость обмена данными с сервером;
  • количество совершённых транзакций в процессе тестирования;
  • количество и процентное соотношение успешных/неудачных транзакций;

Запросы к серверу утилита может выполнять как к одному и тому же URL, так к разным на основе списка. Паузы между запросами к серверу могут быть как произвольными в пределах заданного интервала, так и вовсе отсутствовать, позволяя таким образом выполнять тест производительности сервера.

Главное отличие от ab это какразтаки умени “симулировать” реальное поведение при highload.

Выполним запрос 1000 раз, только теперь одновременно будем отправлять по 10 запросов за раз:

1
$ siege -b -c 10 -r 5 http://domain.com/

Если необходимо использовать список url:

1
$ siege -d 5 -c 200 -r 5 -i -f ~/urls.txt

Результат будет таким:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Transactions:                  50 hits
Availability:             100.00 %
Elapsed time:             1.01 secs
Data transferred:         0.27 MB
Response time:                 0.12 secs
Transaction rate:         49.50 trans/sec
Throughput:                   0.26 MB/sec
Concurrency:              5.84
Successful transactions:       50
Failed transactions:         0
Longest transaction:         0.74
Shortest transaction:       0.06

FILE: /usr/local/var/siege.log
You can disable this annoying message by editing
the .siegerc file in your home directory; change
the directive 'show-logfile' to false.

$ cat /usr/local/var/siege.log
Date & Time            Trans       Elap Time       Data Trans   Resp Time   Trans Rate    Throughput   Concurrent     OKAY     Failed
2014-03-30 16:10:01,  2145,       38.05,          0,          0.27,       56.37,        0.00,        14.94,        2145,       0
2014-03-30 16:10:33,  187,        21.97,          0,          0.29,       8.51,         0.00,        2.50,        187,        0
2014-03-30 16:13:50,  1030,       109.48,         0,          0.27,       9.41,         0.00,        2.50,          1030,       0
2014-03-31 10:03:01,  1038,    15.97,          2,         0.98,       65.00,        0.13,        63.40,        1038,       0
2014-03-31 10:03:40,     63,         33.14,          0,        18.24,      1.90,         0.00,        34.68,      63,         37
2014-04-14 19:22:07,     50,         1.01,           0,           0.12,       49.50,        0.00,        5.84,        50,         0

iperf

Мощнейшая кроссплатформенная консольная утилита генерирования трафика. С ее помощью можно легко измерить пропускную способность канала между двумя компьютерами. Iperf работает в режиме клиент-сервер.

1
2
# Usage
$ iperf -c <server IP address> -b 36M -i 1 -t 20

Для данной утилиты есть так же gui интерфейс Jperf

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

Если тема будет интересна, раскажу еще других штуках для пентестов.

Comments