Все время пользовался ab для тестирования серверов, но с некоторых пор стал натыкаться на тулзу httperf. Стало интересно, почему при живом и здравствующем ab придумывают еще велосипеды. К слово к любым велосипедам отношусь прекрасно, ибо фундаментального софта не бывает, а если он фундаментальный, то чаще всего для ничего не годятся. Встал вопрос разницы между двумя этими зверями.
А разница вот в чем. Httperf пытается посылать непрерывный поток запросов с заданой скоростью, независимо сдох сервер или еще жив. Такое поведение показывает не только максимальную нагрузку, которую может выдержать ваш сервер, но и его поведение, когда он перегружен. То есть можно посмотреть на поведение сервера, когда к нему сыпятся запросы, когда он сам уже не может отвечать. Мы можем посмотреть, что будет с сервером расчитанным на 10 запросов в секунду, если на него подать 100. Такое поведение более соответствует поведению наплыва трафика. А ab в этом плане ориентируется на ответ пользователя, и выдает нам потом красивую картинку среднего времени ответа на запрос, максимальное время ответа и т.д. Кстати недавно узнал что такое у него Faild request - это оказывается запросы, размер которых отличается от первого запроса в серии. Такие дела...
Протестируем допустим сайт http://www.openner.net - тут просто ребята не забанят если что :)
Получили вот такую красивеньку картину... Аж 5 запросов в секунду...
А разница вот в чем. 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=1000httperf --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=1000Maximum connect burst length: 1Total: connections 10 requests 180 replies 170 test-duration 21.870 sConnection 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.6Connection time [ms]: connect 27.6Connection length [replies/conn]: 17.000Request rate: 8.2 req/s (121.5 ms/req)Request size [B]: 78.0Reply 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.3Reply 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=0CPU 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 10Errors: 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
Комментариев нет:
Отправить комментарий