Нагрузочное тестирование сервера с помощью ApacheBench (в Ubuntu 13.10)

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

Инструмент 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: , , , , , , ,

Добавить комментарий