Поиск по сайту:

Как использовать ApacheBench для нагрузочного тестирования на Ubuntu 13.10 VPS


Введение

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

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

В этом уроке мы увидим, как интерпретатор Ruby с разными серверами работает под нагрузкой. Шаги руководства предполагают свежий образ Ubuntu 13.10 x32. Результаты были получены из капли размером 512 МБ.

Монтаж

Обновите базу данных пакетов.

apt-get update

Установите пакет apache2-utils, чтобы получить доступ к ApacheBench.

apt-get install apache2-utils

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

Затем создайте пользователя, который будет управлять 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 по умолчанию использует тире)
  • -g sudo — добавить пользователя в группу sudo (для запуска команд с помощью sudo)
  • test - имя нового пользователя

Установите пароль для нового пользователя.

passwd test

Переключитесь на нового пользователя.

su test

РВМ

Менеджер версий Ruby упрощает работу с различными средами Ruby. Он заботится об установке определенных версий Ruby и изоляции гемсетов. В настоящее время он устанавливается путем запуска скрипта bash с их веб-сайта.

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

Чтобы использовать команду rvm, вам нужно сначала запустить скрипт 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 собирает Ruby из исходного кода, этот шаг может занять некоторое время.

rvm install 2.0.0

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

rvm use 2.0.0

Тестирование

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

Установите Синатру. Это микрофреймворк/DSL для создания веб-приложений 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

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

ab -n <num_requests> -c <concurrency> <addr>:<port><path>

Откройте другой терминал и снова подключитесь к серверу по ssh. Запустите тест с ApacheBench. Я использовал 1000 запросов с параллелизмом 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 — популярный рубиновый веб-сервер, который использует Mongrel для синтаксического анализа и EventMachine для неблокирующего ввода-вывода. Установите Thin и снова запустите сервер. Синатра должен автоматически загрузить Thin и сообщить вам об этом («…с резервной копией от 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 запросов в секунду (вы можете попробовать увеличить общее количество запросов, но для меня это не стало намного выше).

Примечание. Мне удалось получить 1000 запросов в секунду на дроплете Arch Linux.

Заключение

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

Другие инструменты повышения производительности, которые могут вас заинтересовать:

  • httpperf
  • вес
  • httpпресс
  • осада
  • JMeter
  • турбус

Предоставлено: Робертом Куаллсом