Нагрузочное тестирование сервера. siege и ab

Нагрузочное тестирование сервера необходимо для того чтобы выяснить какой максимальный трафик может выдержать используемая конфигурация веб-сервера.

На сервере может использоваться Apache с PHP как модуль mod_php или же с РНР в режиме fastcgi,  может использоваться Nginx + PHP-FPM или связка Nginx + Apache.

 

Каждый из возможных вариантов будет показывать различные результаты при нагрузочном тестировании и в продакшене при разных версиях РНР (для которых могут применяться или не применяться акселераторы — такие как APC или opcache).

 

Нагрузочное тестирование сервера, Siege и ab

ab — Apache HTTP server benchmarking tool, утилита позволяет определить максимальное количество одновременных запросов, которые сможет обработать веб-сервер в текущей конфигурации.

нагрузочное тестирование сервера

 

ab является частью пакета Apache и дополнительно устанавливать утилиту не нужно. В качестве основного аргумента передается url к файлу с расширением .html или .php. При помощи ключа -n задается количество последовательных запросов, которые необходимо выполнить.

 

ab -n 1000 http://example.com:80/test.html

 

На выходе имеем примерно следующие результаты:

Concurrency Level: 1
Time taken for tests: 1.600 seconds
Complete requests: 1000
Failed requests: 0
Write errors: 0
Total transferred: 623000 bytes
HTML transferred: 183000 bytes
Requests per second: 666.58 [#/sec] (mean)
Time per request: 1.600 [ms] (mean)
Time per request: 1.600 [ms] (mean, across all concurrent requests)
Transfer rate: 321.14 [Kbytes/sec] received

 

В первой строке указано, что одновременно был выполнен только один запрос. В условиях продакшена такая ситуация маловероятна, поэтому утилиту лучше запускать также с ключом -c, определяющим количество клиентов одновременно выполняющих запрос к скрипту или странице и с ключом -k, определяющим необходимость симуляции keepalive соединений (актуально для php скриптов).

ab -n 1000 -k -с 1000 http://example.com:80/test.php

При обработке php результаты будут значительно хуже, потому что содержимое не статическое и у веб-сервера уходит время на обработку программного кода — разница заметна даже если в качестве скрипта использовать phpinfo().

 

Тысячу обращений от тысячи клиентов параллельно выдержит далеко не каждая инсталяция веб-сервера, но уменьшая значение параметров можно найти максимальную возможную нагрузку.

ab можно использовать, но результаты, выдаваемые утилитой говорят только о количестве максимальных последовательных или параллельных запросов, которые может обработать сервер. Для воспроизведения максимально приближенных к реальности условий следует применять другие инструменты, один из лучших вариантов — Siege

 

 

Использование Siege при нагрузочном тестировании

Siege является отдельной утилитой в отличие от ab. Количество обращений к url также можно задавать передавая в команде ключ со значением.

 

В утилита устанавливается просто  — из репозитория

apt-get install siege

 

После установки нужно выполнить команду, которая создаст в домашнем каталоге пользователя конфигурационный файл .siegerc, его в дальнейшем можно редактировать

siege.config

New configuration template added to /home/admin/.siegerc
Run siege -C to view the current settings in that file

 

Часто применяемые опции и флаги Siege:

-g -URL — обеспечит обращение по указанному адресу и вернет заголовки

-v — вывод детальной информации с типом используемого протокола, адресом обращения и кодом ответа сервера

-c — количество пользователей, поведение которых имитируется (более 200-300 для большинства серверов устанавливать не стоит, но допустимы любые значения)

-i — режим имитации интернета, Siege будет случайным образом выбирать адреса из списка заданного администратором и обращаться к ним

-t — время тестирования (секунды — S, минуты — M, часы — H) передается как -t3600S

-d — задержка между последовательными запросами (например, -d1 обеспечит задержку в 1 секунду)

 

Многие опции можно задать в файле .siegerc, который был сгенерирован сразу после установки пакета.

 

использование siege

 

Список адресов, к которым будет обращаться утилита нужно задать в ~/etc/urls.txt, также можно использовать флаг -f и передать путь к файлу с адресами в виде -f /home/list.txt

 

Команда запуска тестирования в общем случае может выглядеть так:

siege  -v -d2 -c 100 -i -t3600S -f /home/list.txt

 

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