Нагрузочное тестирование сервера с помощью ApacheBench (в Ubuntu 13.10)
Ubuntu | Комментировать запись
Нагрузочное тестирование – отличный способ проверки сервера перед развертыванием сайта/приложения. Это позволяет быстро улучшить сценарий проекта перед выполнением более подробных тестов.
Инструмент Apache Bench (или ab) тестирует серверы нагрузкой, одновременно отправляя произвольное количество запросов. Хотя ab был разработан для проверки Apache, его можно использовать и на любом другом HTTP-сервере.
Данное руководство покажет работу этого инструмента на новом сервере Ubuntu 13.10 x32.
Установка ApacheBench
Сначала обновите базу пакетов.
apt-get update
Установите пакет apache2-utils, чтобы получить доступ к ApacheBench:
apt-get install apache2-utils
Создание пользователя ApacheBench
Теперь нужно создать пользователя для управления Ruby. Нижеприведенные команды запускать как root не рекомендуется.
useradd -m -d /home/test -s /bin/bash -g sudo test
Данная команда выполняет следующие действия:
- useradd создает нового пользователя;
- флаг –m создает его домашний каталог;
- -d /home/test делает каталог /home/test домашним каталогом пользователя;
- -s /bin/bash делает bash оболочкой пользователя по умолчанию (Ubuntu использует bash по умолчанию);
- -g sudo добавляет пользователя в группу sudo (что позволяет запускать команды при помощи sudo);
- test – имя нового пользователя
Установите пароль для этого пользователя:
passwd test
А затем переключитесь на него:
su test
RVM
Ruby Version Manager позволяет легко использовать несколько сред Ruby. Кроме того, он следит за установкой необходимых версий Ruby и изолирует gemset-ы. Для установки RVM нужно просто запустить bash-скрипт с сайта проекта:
\curl -L https://get.rvm.io | bash -s stable
Чтобы получить возможность использовать команду rvm, нужно запустить одноименный скрипт:
source ~/.rvm/scripts/rvm
При желании можно поместить эту строку в файл .bashrc, и тогда команда rvm будет доступна этому пользователю всегда.
echo "source ~/.rvm/scripts/rvm" >> ~./bashrc
Чтобы убедиться, что rvm-скрипт работает, используйте следующую строку:
type rvm | head -1
rvm is a function
Затем Ruby 2.0.0. RVM запросит пароль пользователя, поскольку ему нужно установить зависимости прежде чем он сможет установить Ruby. Это действие может занять некоторое время, поскольку RVM компилирует Руби из исходного кода.
rvm install 2.0.0
Переключитесь на только что установленную версию Ruby. Возможно, это произойдет по умолчанию после установки, но проверка не повредит.
rvm use 2.0.0
Тестирование сервера нагрузкой
Теперь попробуйте создать простой сайт и узнать, сколько запросов он способен обработать.
Установите Sinatra – микрофреймворк для создания веб-приложений Ruby. Используйте флаг –no-*, чтобы пропустить документацию:
gem install sinatra --no-rdoc --no-ri
Создайте простое приложение Sinatra, которое будет отзываться одной фразой – hello world.
cd ~
vim app.rb
# app.rb
require 'sinatra'
get '/' do
'hello world'
end
Запустите сервер.
ruby app.rb
Когда сервер запущен, приступайте к нагрузочному тестированию. Базовый синтаксис ApacheBench выглядит так:
ab -n <num_requests> -c <concurrency> <addr>:<port><path>
С помощью другого терминала создайте еще одно SSH-подключение к серверу, затем запустите тест ApacheBench (в данном руководстве было использовано 1000 запросов и concurrency 100).
Примечание: не забудьте поставить / в конце пути.
ab -n 1000 -c 100 http://localhost:4567/
Server Software: WEBrick/1.3.1
Server Hostname: localhost
Server Port: 4567
Document Path: /
Document Length: 11 bytes
Concurrency Level: 100
Time taken for tests: 3.410 seconds
Complete requests: 1000
Failed requests: 0
Write errors: 0
Total transferred: 288000 bytes
HTML transferred: 11000 bytes
Requests per second: 293.23 [#/sec] (mean)
Time per request: 341.034 [ms] (mean)
Time per request: 3.410 [ms] (mean, across all concurrent requests)
Transfer rate: 82.47 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 1 2.0 0 11
Processing: 185 332 90.3 311 578
Waiting: 28 280 83.2 267 574
Total: 193 333 89.7 311 578
Percentage of the requests served within a certain time (ms)
50% 311
66% 357
75% 423
80% 446
90% 467
95% 480
98% 490
99% 501
100% 578 (longest request)
Результат показывает около 300 запросов в секунду. Конечно, WEBrick не очень быстрая библиотека. Используйте комбинацию Ctrl-C, чтобы остановить сервер.
Установка Thin
Thin – это популярный веб-сервер Ruby, который использует Mongrel для парсинга и EventMachine для реализации неблокирующего I/O. Установите Thin и запустите сервер. Фреймворк Sinatra загрузит Thin автоматически и сообщит об этом («…with backup from Thin»).
gem install thin
ruby app.rb
Снова проведите тестирование сервера нагрузкой; в этот раз оно должно пройти немного быстрее.
Server Software: thin
Server Hostname: localhost
Server Port: 4567
Document Path: /
Document Length: 11 bytes
Concurrency Level: 100
Time taken for tests: 1.339 seconds
Complete requests: 1000
Failed requests: 0
Write errors: 0
Total transferred: 244000 bytes
HTML transferred: 11000 bytes
Requests per second: 747.00 [#/sec] (mean)
Time per request: 133.870 [ms] (mean)
Time per request: 1.339 [ms] (mean, across all concurrent requests)
Transfer rate: 178.00 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 1 1.8 0 8
Processing: 55 128 19.9 132 155
Waiting: 42 116 19.7 121 144
Total: 62 129 18.5 132 156
Percentage of the requests served within a certain time (ms)
50% 132
66% 135
75% 137
80% 139
90% 144
95% 149
98% 152
99% 155
100% 156 (longest request)
В данном случае видно, что Thin значительно ускоряет сервер по сравнению с WEBrick; как видно по результатам; теперь выведено около 700 запросов в секунду.
Примечание: в Arch Linux это значение достигает 1000 запросов в секунду.
Итоги
Конечно, данные результаты не влияют на реальную производительность сервера. Медленный шаблонизатор и/или база данных могут значительно снизить эти показатели. Тем не менее, это позволяет получить примерные данные.
Попробуйте поработать с другими инструментами:
Tags: ApacheBench, Linux, RVM, Sinatra, Thin, Ubuntu, Ubuntu 13.10, VPS