Обычно httperf запускается с опцией –hog, которая означает, что будут использоваться столько TCP портов, сколько нужно, а не только в интервале от 1024 до 50000.
Пример:
httperf –hog –server=192.168.1.1 –wsess=100,10,0.1 –rate=50 –timeout=5
В этом примере httperf создаёт 100 соединений, по 10 GET запросов корневой страницы. Запросы создаются с интервалом 0.1 секунда. Сессии создаются с частотой 50 в секунду. Опция timeout говорит нагрузчику, что максимальное время на установление соединения, отправление запроса, ожидание ответа и получение ответа не должно превышать 5 секунд. Если хотя одно из этого превышает 5 секунд, то соединение закрывается.
Пример:
httperf –hog –server=192.168.1.1 –wsesslog=100,0.1,http_scenario –rate=50
В этом примере создаются 100 соединений. В файле http_scenario записан сценарий, по которому заросы отправляются серверу. Если в файле для запроса не указан интервал времени между запросами, он принимается равным 0.1с, как указано в опции wsesslog.
Сценарий можно создать следуюшим образом. Через браузер заходим на сервер, и имитируем действия реального пользователя. Из логов WEB-сервера копируем только URL'ы в файл сценария. Содержимое файла может иметь примерно такой вид:
/common/sysnet/support.jsf?bare=true method=GET
/resource/common/images/squares/square-15.gif method=GET
/resource/common/images/squares/square-0.gif method=GET
/resource/common/images/squares/square-14.gif method=GET
/resource/common/images/squares/square-5.gif method=GET
/faces/resources/jmaki-min.js method=GET
/common/index.jsf method=POST
/common/index.jsf method=POST
/common/index.jsf method=POST
/resources/config.json method=GET
/xhp?key=coretechtips&count=20 method=GET
/xhp?key=sdnevents method=GET
/xhp?key=events method=GET
Опция method – необязательна.
Пример отчёта httperf о нагрузочном тестировании:
Total: connections 100 requests 1000 replies 1000 test-duration 10.868 s
Connection rate: 9.2 conn/s (108.7 ms/conn, <=37 concurrent connections)
Connection time [ms]: min 962.6 avg 2133.7 max 3717.5 median 2080.5 stddev 847.8
Connection time [ms]: connect 0.8
Connection length [replies/conn]: 10.000
Request rate: 92.0 req/s (10.9 ms/req)
Request size [B]: 64.0
Reply rate [replies/s]: min 63.4 avg 95.3 max 127.2 stddev 45.1 (2 samples)
Reply time [ms]: response 120.5 transfer 2.4
Reply size [B]: header 261.0 content 22375.0 footer 0.0 (total 22636.0)
Reply status: 1xx=0 2xx=1000 3xx=0 4xx=0 5xx=0
CPU time [s]: user 0.93 system 9.87 (user 8.6% system 90.8% total 99.4%)
Net I/O: 2039.7 KB/s (16.7*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
Session rate [sess/s]: min 5.60 avg 9.20 max 12.60 stddev 4.95 (100/100)
Session: avg 1.00 connections/session
Session lifetime [s]: 2.1
Session failtime [s]: 0.0
Session length histogram: 0 0 0 0 0 0 0 0 0 0 100
Для того, чтобы сделать отчёт более наглядным и выделить наиболее важную информацию, был написан скрипт на языке Ruby. Скачать его можно отсюда: http://github.com/igrigorik/autoperf. В конфиге задаётся опция httperf_wsesslog=10,5,httperf_scenario. Частота генерации сеансов задаётся с помощью опций low_rate, high_rate и rate_step. Как несложно догадаться, тестирование будет проводиться с разными частотами, начиная от low_rate до high_rate с шагом rate_step. Autoperf выводит таблицу такого вида:
+---------------------------------------------------------------------------------+
| rate | conn/s | req/s | replies/s avg | errors | 5xx status | net io (KB/s) |
+---------------------------------------------------------------------------------+
| 100 | 2.9 | 37.3 | 0.0 | 0 | 0 | 179.2 |
| 150 | 2.9 | 36.0 | 0.0 | 1 | 0 | 174.5 |
| 200 | 2.7 | 32.7 | 0.0 | 1 | 0 | 158.8 |
| 250 | 2.7 | 29.4 | 0.0 | 3 | 0 | 145.8 |
| 300 | 7.2 | 18.1 | 0.0 | 10 | 0 | 43.4 |
| 350 | 2.8 | 26.5 | 0.0 | 5 | 0 | 135.3 |
| 400 | 2.8 | 36.0 | 0.0 | 0 | 0 | 173.2 |
| 450 | 2.6 | 27.9 | 0.0 | 3 | 0 | 138.4 |
| 500 | 2.5 | 28.7 | 0.0 | 2 | 0 | 140.6 |
+---------------------------------------------------------------------------------+
1. Для FreeBSD cтавим httperf из портов:
#cd /usr/ports/benchmarks/httperf
#make install
2. Скачиваем autoperf: http://github.com/igrigorik/autoperf
3. Выставляем опции в конфиге:
host = 192.168.1.1
high_rate = 500
rate_step = 50
httperf_wsesslog=10,0.1,httperf_scenario
4. Формируем файл httperf_scenario путём копирования логов WEB сервера.
5. Запускаем autoperf:
low_rate = 100
port = 4848
Остальные опции не нужны.
#ruby autoperf.rb -c auperf.conf