Одним из инструментов для нагрузочного тестирования web-серверов есть Siege.
Siege умеет выполнять многопоточное нагрузочное тестирование web-серверов по протоколу HTTP (S)/1.0/1.1 методами GET и POST. Утилита симулирует параллельные запросы к веб-серверу на протяжении заданного времени и в конце теста вычисляет следующие показатели:
Запросы к серверу утилита может выполнять как к одному и тому же URL, так к разным на основе списка. Паузы между запросами к серверу могут быть как произвольными в пределах заданного интервала, так и вовсе отсутствовать, позволяя таким образом выполнять тест производительности сервера.
Siege присутствует в репозиториях всех популярных дистрибутивов, так что вы должны без труда установить её в своей системе. Если же ваш дистрибутив не располагает утилитой в среди включённых в комплект пакетов, вы можете самостоятельно собрать siege из исходных кодов, полученных со страницы проекта на freshmeat.net.
Условия тестирования, приводимого в этой заметке, те же самые, что и в предыдущей. Следуя схеме тестирования, определённой в предыдущей статье, для начала выполним 1000 последовательных запросов статического HTML-файла:
$ siege -b -c 1 -r 1000 http://aserver.ashep:80/test.html
Здесь:
После выполнения тестирования утилита выведет результаты:
Transactions: 1000 hits Availability: 100.00 % Elapsed time: 10.97 secs Data transferred: 8.95 MB Response time: 0.01 secs Transaction rate: 91.16 trans/sec Throughput: 0.82 MB/sec Concurrency: 1.00 Successful transactions: 1000 Failed transactions: 0 Longest transaction: 0.03 Shortest transaction: 0.00
Из результатов теста видно, что:
Попробуем теперь выполнить запрос того же URL 1000 раз, только теперь одновременно будем отправлять по 200 запросов за раз:
$ siege -b -c 200 -r 5 http://aserver.ashep:80/test.html
Transactions: 1000 hits Availability: 100.00 % Elapsed time: 12.69 secs Data transferred: 8.95 MB Response time: 1.70 secs Transaction rate: 78.80 trans/sec Throughput: 0.71 MB/sec Concurrency: 134.16 Successful transactions: 1000 Failed transactions: 0 Longest transaction: 10.26 Shortest transaction: 0.01
В результатах этого теста видим значительно возросшее время, требуемое серверу для ответа — 1,7 секунды против 0,01 в предыдущем тесте. При этом на 12 снизилось количество транзакций обрабатываемых за одну секунду. Из генерируемых двухсот одновременных запросов сервер в среднем смог обрабатывать лишь 134,16. Но при всём этом доступность сервера составила 100%, т. е. сервер не был загружен настолько, что был не в состоянии принимать входящие сетевые соединения.
Попробуем выполнить тот же тест, только исключив опцию '-b', что приведёт к снижению нагрузки на сервер за счёт произвольных пауз между транзакциями, что больше приближено к реальному поведению клиентов вашего сервера:
$ siege -c 200 -r 5 http://aserver.ashep:80/test.html
Transactions: 1000 hits Availability: 100.00 % Elapsed time: 12.29 secs Data transferred: 8.95 MB Response time: 1.52 secs Transaction rate: 81.37 trans/sec Throughput: 0.73 MB/sec Concurrency: 124.05 Successful transactions: 1000 Failed transactions: 0 Longest transaction: 9.32 Shortest transaction: 0.01
Как видно, некоторые показатели несколько улучшились, за счёт ухудшения показателя Concurrency, что логично. При необходимости вы можете увеличить диапазон случайно временной задержки между отправкой запросов при помощи опции '-d'. Например, чтобы siege выдерживал случайную паузу между запросами в пределах между 0 и 5 секундами:
$ siege -d 5 -c 200 -r 5 http://aserver.ashep:80/test.html
Если вам необходимо, чтобы siege «побродил» по вашему серверу вместо того, чтобы тупо долбиться на один и тот-же URL, создайте текстовый файл со списком URL, которые необходимо посетить в процессе тестирования и укажите путь к нему при помощи опции '-f':
$ siege -d 5 -c 200 -r 5 -f ~/urls.txt
Чтобы заставить утилиту брать URL из файла не последовательно, а случайно, добавьте опцию '-i':
$ siege -d 5 -c 200 -r 5 -i -f ~/urls.txt
При необходимости вы можете ограничить время, которое будет отведено siege для выполнения теста, при помощи опции '-t'. Обратите внимание, что эта опция имеет приоритет перед опцией '-r'. При указании значения опции '-t' можно использовать суффиксы 's', 'm' и 'h' для определения времени в секундах, минутах и часах соответственно. Например:
$ siege -d 5 -c 200 -t 10s http://aserver.ashep:80/test.htmlИсточник статьи