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

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

Инструмент Apache Bench (или ab) позволяет протестировать серверы нагрузкой, одновременно отправив произвольное количество запросов. Хотя ab был разработан для проверки веб-серверов Apache, данный инструмент может быть использован и на любом другом HTTP-сервере.

Данное руководство продемонстрирует работу этого инструмента. Для выполнения описанных в нем действий понадобится новый сервер Arch Linux x86_64.

Установка ApacheBench

Обновите базу пакетов:

pacman -Sy

Затем установите Apache, чтобы получить доступ к пакету Apache Bench (его также можно найти в apache-tools в репозитории AUR):

pacman -S apache

Создание пользователя с ограниченными привилегиями

Теперь нужно создать пользователя для управления интерпретатором Ruby. Нижеприведенные команды запускать как root не рекомендуется.

useradd -m -d /home/test test

Чтобы переключиться на нового пользователя, наберите:

su test

RVM

Ruby Version Manager позволяет работать с несколькими средами Ruby. Кроме того, он следит за установкой необходимых версий Ruby и изолирует gemset-ы. Для установки RVM нужно просто запустить bash-скрипт с сайта проекта:

\curl -L https://get.rvm.io | bash -s stable

Чтобы иметь возможность использовать команду rvm, запустите скрипт rvm:

source ~/.rvm/scripts/rvm

Затем установите Ruby 2.0.0. как правило, RVM устанавливает Ruby из исходного кода, потому установка может занять некоторое время.

rvm install 2.0.0

Переключитесь на только что установленную версию Ruby. Возможно, это произойдет по умолчанию после установки, но проверка не повредит.

rvm use 2.0.0

Тестирование сервера нагрузкой

Теперь, когда Ruby установлен, попробуйте создать простой сайт и проверить, сколько запросов он способен обработать.

Установите Sinatra – микрофреймворк для создания веб-приложений Ruby. Флаг –no-* пропустит документацию:

gem install sinatra --no-rdoc --no-ri

Теперь создайте простое приложение Sinatra, которое отзовется одной фразой – hello world.

cd ~
vi 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/
Seconcurrenrver Software:        WEBrick/1.3.1
Server Hostname:        0.0.0.0
Server Port:            4567
Document Path:          /
Document Length:        11 bytes
Concurrency Level:      100
Time taken for tests:   2.950 seconds
Complete requests:      1000
Failed requests:        0
Write errors:           0
Total transferred:      288000 bytes
HTML transferred:       11000 bytes
Requests per second:    338.94 [#/sec] (mean)
Time per request:       295.041 [ms] (mean)
Time per request:       2.950 [ms] (mean, across all concurrent requests)
Transfer rate:          95.33 [Kbytes/sec] received
Connection Times (ms)
min  mean[+/-sd] median   max
Connect:        0    1   2.8      0      15
Processing:   117  285  94.3    268     553
Waiting:       70  248  91.8    234     544
Total:        117  286  93.6    271     553
Percentage of the requests served within a certain time (ms)
50%    271
66%    327
75%    354
80%    361
90%    413
95%    468
98%    512
99%    539
100%    553 (longest request)

Как видите, в результате выведено около 300 запросов в секунду. Конечно, WEBrick не очень быстрая библиотека. Используйте комбинацию Ctrl-C, чтобы прервать работу сервера.

Thin – это популярный веб-сервер Ruby, который использует Mongrel для парсинга и EventMachine для реализации неблокирующего I/O. Установите Thin и снова запустите сервер. Фреймворк Sinatra загрузит Thin автоматически и сообщит об этом (“…with backup from Thin”).

gem install thin
ruby app.rb

Попробуйте снова выполнить нагрузочное тестирование. В этот раз оно должно пройти немного быстрее.

Примечание: сервер Thin не позволяет ApacheBench подключаться через локальный хост; подключиться можно через 0.0.0.0 или 127.0.0.1.

ab -n 1000 -c 100 http://0.0.0.0:4567/
...
Concurrency Level:      100
Time taken for tests:   0.989 seconds
Complete requests:      1000
Failed requests:        0
Write errors:           0
Total transferred:      244000 bytes
HTML transferred:       11000 bytes
Requests per second:    1011.13 [#/sec] (mean)
Time per request:       98.899 [ms] (mean)
Time per request:       0.989 [ms] (mean, across all concurrent requests)
Transfer rate:          240.93 [Kbytes/sec] received

В данном случае кажется, что Thin делает сервер намного быстрее, чем WEBrick; как видно по результатам, теперь выведено около 1000 запросов в секунду.

Итоги

Конечно, данные результаты не влияют на реальную производительность сервера. Медленный шаблонизатор и/или база данных могут значительно снизить данные показатели. Тем не менее, это позволяет получить примерные данные.

Tags: , , , , , , , ,

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