Какое количество посетителей одновременно выдержит ваш сайт и сервер? При каком количестве посетителей скорость работы сайта начнет уменьшаться? Если вы задавались такими вопросами, то этот материал будет полезен для вас.
В первой части статьи мы рассмотрим консольные утилиты для нагрузочного тестирования. Это 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 посылает запросы согласно своим настройкам, невзирая на то, отвечает сервер на них или уже нет. Таким образом можно определить не только какую максимальную нагрузку может выдержать сервер, но и как будет себя вести сервер в момент, когда нагрузка достигла своего пика.
Как и с первой утилитой в качестве тестирования запустим 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/