Страницы

пятница, 23 ноября 2012 г.

Разница между httperf и ab

      Все время пользовался ab для тестирования серверов, но с некоторых пор стал натыкаться на тулзу httperf.  Стало интересно, почему при живом и здравствующем ab  придумывают еще велосипеды. К слово к любым велосипедам отношусь прекрасно, ибо фундаментального софта не бывает, а если он фундаментальный, то чаще всего для  ничего не годятся. Встал вопрос разницы между двумя этими зверями.




       А разница вот в чем. Httperf пытается посылать непрерывный поток запросов с заданой скоростью, независимо сдох сервер или еще жив. Такое поведение показывает не только максимальную нагрузку, которую может выдержать ваш сервер, но и его поведение, когда он перегружен. То есть можно посмотреть на поведение сервера, когда к нему сыпятся запросы, когда он сам уже не может отвечать. Мы можем посмотреть, что будет с сервером расчитанным на 10 запросов в секунду, если на него подать 100. Такое поведение более соответствует поведению наплыва трафика.  А ab в этом плане ориентируется на ответ пользователя, и выдает нам потом красивую картинку среднего времени ответа на запрос, максимальное время ответа и т.д. Кстати недавно узнал что такое у него Faild request - это оказывается запросы, размер которых отличается от первого запроса в серии. Такие дела...

Протестируем допустим сайт http://www.openner.net - тут просто ребята не забанят если что :)



ab -n 1000 -c 3  http://www.openner.net/index.html

This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking www.openner.net (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests

Server Software:        lighttpd/1.4.26
Server Hostname:        www.openner.net
Server Port:            80
Document Path:          /index.html
Document Length:        27456 bytes
Concurrency Level:      3
Time taken for tests:   177.136 seconds
Complete requests:      1000
Failed requests:        0
Write errors:           0
Total transferred:      27659311 bytes
HTML transferred:       27456000 bytes
Requests per second:    5.65 [#/sec] (mean)
Time per request:       531.407 [ms] (mean)
Time per request:       177.136 [ms] (mean, across all concurrent requests)
Transfer rate:          152.49 [Kbytes/sec] received
Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:       29  121 301.7     94    4371
Processing:   201  410 339.3    358    8705
Waiting:      105  197 118.9    188    2064
Total:        279  531 466.4    436    8796
Percentage of the requests served within a certain time (ms)
  50%    436
  66%    489
  75%    511
  80%    519
  90%    617
  95%    831
  98%   1673
  99%   3378
 100%   8796 (longest request)


Получили вот такую красивеньку картину... Аж 5 запросов в секунду...


 
httperf --port=80 --num-conns=10 --rate=100  --server=www.openner.net --uri=/index.html --num-calls=1000
httperf --client=0/1 --server=www.openner.net --port=80 --uri=/index.html --rate=100 --send-buffer=4096 --recv-buffer=16384 --num-conns=10 --num-calls=1000
Maximum connect burst length: 1

Total: connections 10 requests 180 replies 170 test-duration 21.870 s

Connection rate: 0.5 conn/s (2187.0 ms/conn, <=10 concurrent connections)
Connection time [ms]: min 20219.4 avg 21194.5 max 21790.0 median 21325.5 stddev 524.6
Connection time [ms]: connect 27.6
Connection length [replies/conn]: 17.000

Request rate: 8.2 req/s (121.5 ms/req)
Request size [B]: 78.0

Reply rate [replies/s]: min 6.8 avg 7.7 max 8.6 stddev 0.7 (4 samples)
Reply time [ms]: response 1192.8 transfer 52.3
Reply size [B]: header 212.0 content 27456.0 footer 2.0 (total 27670.0)
Reply status: 1xx=0 2xx=170 3xx=0 4xx=0 5xx=0

CPU time [s]: user 3.48 system 18.12 (user 15.9% system 82.8% total 98.8%)
Net I/O: 210.7 KB/s (1.7*10^6 bps)

Errors: total 10 client-timo 0 socket-timo 0 connrefused 0 connreset 10
Errors: fd-unavail 0 addrunavail 0 ftab-full 0 other 0

Получаем долгий ответ в среднем 20 с.
Connection rate: 0.5 conn/s (2187.0 ms/conn, <=10 concurrent connections)
Connection time [ms]: min 20219.4 avg 21194.5 max 21790.0 median 21325.5 stddev 524.6

















Комментариев нет: