Учебники

Apache Bench — Настройка среды

В этой главе мы расскажем вам, как настроить вашу среду для Apache Bench на вашем VPS.

Системные требования

  • Память — 128 МБ

  • Дисковое пространство — нет минимальных требований

  • Операционная система — Нет минимальных требований

Память — 128 МБ

Дисковое пространство — нет минимальных требований

Операционная система — Нет минимальных требований

Установка Apache Bench

Apache Bench является автономным приложением и не зависит от установки веб-сервера Apache. Ниже приведен двухэтапный процесс установки Apache Bench.

Шаг 1 — Обновление базы данных пакетов.

# apt-get update

Обратите внимание, что символ # перед командой терминала означает, что пользователь root выполняет эту команду.

Шаг 2 — Установите пакет утилит apache2, чтобы получить доступ к Apache Bench.

# apt-get install apache2-utils

Apache Bench теперь установлен. Если вы хотите протестировать веб-приложение, размещенное на том же VPS, достаточно установить только веб-сервер Apache —

# apt-get install apache2

Будучи утилитой Apache, Apache Bench автоматически устанавливается при установке веб-сервера Apache.

Проверка установки Apache Bench

Давайте теперь посмотрим, как проверить установку Apache Bench. Следующий код поможет проверить установку —

# ab -V

Выход

This is ApacheBench, Version 2.3 <$Revision: 1604373 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Когда вы видите вышеупомянутый вывод терминала, это означает, что вы успешно установили Apache Bench.

Создание привилегированного пользователя Sudo

С точки зрения безопасности, для системного администратора считается хорошей практикой создавать пользователя sudo вместо того, чтобы работать от имени пользователя root. Мы создадим тестового пользователя с именем test для этой цели —

# useradd -m -d /home/test -g sudo test

Давайте установим пароль для нового пользователя —

# passwd test

Система запросит новый пароль для пользовательского теста. Вы можете ввести простой пароль, поскольку мы просто тестируем его, а не внедряем на рабочий сервер. Обычно команда sudo предлагает ввести пароль пользователя sudo; Рекомендуется не использовать сложный пароль, так как процесс становится громоздким.

Выход

Enter new UNIX password:
Retype new UNIX password:   
passwd: password updated successfully

Тестирование сайта Apache.org

В этом разделе мы протестируем веб-сайт Apache.org. Давайте сначала переключимся на пользовательский тест sudo —

# su test

Для начала мы проверим веб-сайт организации Apache, https://www.apache.org/ . Сначала мы запустим команду, а затем поймем вывод —

$ ab -n 100 -c 10 https://www.apache.org/

Здесь -n — количество запросов, которые нужно выполнить для сеанса бенчмаркинга. По умолчанию выполняется только один запрос, который обычно приводит к непредставительным результатам сравнительного анализа.

И -c — это параллелизм, который обозначает количество одновременных запросов. По умолчанию один запрос за раз.

Таким образом, в этом тесте Apache Bench сделает 100 запросов с параллелизмом 10 на сервер организации Apache.

Выход

This is ApacheBench, Version 2.3 <$Revision: 1604373 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking www.apache.org (be patient).....done

Server Software:        Apache/2.4.7
Server Hostname:        www.apache.org
Server Port:            443
SSL/TLS Protocol:       TLSv1.2,ECDHE-RSA-AES256-GCM-SHA384,2048,256

Document Path:          /
Document Length:        58769 bytes

Concurrency Level:      10
Time taken for tests:   1.004 seconds
Complete requests:      100
Failed requests:        0
Total transferred:      5911100 bytes
HTML transferred:       5876900 bytes
Requests per second:    99.56 [#/sec] (mean)
Time per request:       100.444 [ms] (mean)
Time per request:       10.044 [ms] (mean, across all concurrent requests)
Transfer rate:          5747.06 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:       39   46  30.9     41     263
Processing:    37   40  21.7     38     255
Waiting:       12   15  21.7     13     230
Total:         77   86  37.5     79     301

Percentage of the requests served within a certain time (ms)
  50%     79
  66%     79
  75%     80
  80%     80
  90%     82
  95%     84
  98%    296
  99%    301
 100%    301 (longest request)

Запустив наш первый тест, вам будет легко распознать схему использования этой команды, которая выглядит следующим образом:

# ab [options .....]  URL

где,

  • ab — команда Apache Bench

  • параметры — флаги для конкретной задачи, которую мы хотим выполнить

  • URL — путь URL, который мы хотим проверить

ab — команда Apache Bench

параметры — флаги для конкретной задачи, которую мы хотим выполнить

URL — путь URL, который мы хотим проверить

Понимание выходных значений

Нам нужно понимать различные метрики, чтобы понимать различные выходные значения, возвращаемые ab. Здесь идет список —

  • Серверное программное обеспечение — это имя веб-сервера, возвращаемое в заголовке HTTP первого успешного возврата.

  • Имя хоста сервера — это DNS или IP-адрес, указанный в командной строке.

  • Порт сервера — это порт, к которому подключается ab. Если порт не указан в командной строке, по умолчанию будет установлено значение 80 для http и 443 для https.

  • Протокол SSL / TLS — это параметр протокола, согласованный между клиентом и сервером. Это будет напечатано, только если используется SSL.

  • Путь документа — это URI запроса, проанализированный из строки командной строки.

  • Длина документа — это размер в байтах первого успешно возвращенного документа. Если длина документа изменяется во время тестирования, ответ считается ошибкой.

  • Уровень параллелизма — это количество одновременных клиентов (эквивалентных веб-браузерам), использованных во время теста.

  • Время, затраченное на тесты — это время, затрачиваемое с момента создания первого сокетного соединения до момента получения последнего ответа.

  • Выполнено запросов — количество полученных успешных ответов.

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

  • Всего перенесено — общее количество байтов, полученных с сервера. Это число по сути количество байтов, отправленных по проводам.

  • Переданный HTML — общее количество байтов документа, полученных с сервера. Это число исключает байты, полученные в заголовках HTTP

  • Количество запросов в секунду — это количество запросов в секунду. Это значение является результатом деления количества запросов на общее время.

  • Время на запрос — среднее время, затраченное на запрос. Первое значение рассчитывается по формуле параллелизма * timetaken * 1000 / done, а второе значение рассчитывается по формуле timetaken * 1000 / done.

  • Скорость передачи — скорость передачи, рассчитанная по формуле totalread / 1024 / timetaken.

Серверное программное обеспечение — это имя веб-сервера, возвращаемое в заголовке HTTP первого успешного возврата.

Имя хоста сервера — это DNS или IP-адрес, указанный в командной строке.

Порт сервера — это порт, к которому подключается ab. Если порт не указан в командной строке, по умолчанию будет установлено значение 80 для http и 443 для https.

Протокол SSL / TLS — это параметр протокола, согласованный между клиентом и сервером. Это будет напечатано, только если используется SSL.

Путь документа — это URI запроса, проанализированный из строки командной строки.

Длина документа — это размер в байтах первого успешно возвращенного документа. Если длина документа изменяется во время тестирования, ответ считается ошибкой.

Уровень параллелизма — это количество одновременных клиентов (эквивалентных веб-браузерам), использованных во время теста.

Время, затраченное на тесты — это время, затрачиваемое с момента создания первого сокетного соединения до момента получения последнего ответа.

Выполнено запросов — количество полученных успешных ответов.

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

Всего перенесено — общее количество байтов, полученных с сервера. Это число по сути количество байтов, отправленных по проводам.

Переданный HTML — общее количество байтов документа, полученных с сервера. Это число исключает байты, полученные в заголовках HTTP

Количество запросов в секунду — это количество запросов в секунду. Это значение является результатом деления количества запросов на общее время.

Время на запрос — среднее время, затраченное на запрос. Первое значение рассчитывается по формуле параллелизма * timetaken * 1000 / done, а второе значение рассчитывается по формуле timetaken * 1000 / done.

Скорость передачи — скорость передачи, рассчитанная по формуле totalread / 1024 / timetaken.

Быстрый анализ результатов нагрузочного тестирования

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

  • Организация Apache использует свое собственное программное обеспечение веб-сервера — Apache (версия 2.4.7)

  • Сервер прослушивает порт 443 из-за https. Если бы это было http, это было бы 80 (по умолчанию).

  • Всего передано 58769 байт за 100 запросов.

  • Тест завершен за 1,004 секунды. Нет неудавшихся запросов.

  • Запросов в секунду — 99,56. Это считается довольно хорошим числом.

  • Время на запрос — 100,444 мс (для 10 одновременных запросов). Таким образом, для всех запросов это 100,444 мс / 10 = 10,044 мс.

  • Скорость передачи — 1338,39 [Кбайт / с] получено.

  • В статистике времени соединения вы можете заметить, что многим запросам приходилось ждать несколько секунд. Это может быть связано с тем, что веб-сервер apache помещает запросы в очередь ожидания.

Организация Apache использует свое собственное программное обеспечение веб-сервера — Apache (версия 2.4.7)

Сервер прослушивает порт 443 из-за https. Если бы это было http, это было бы 80 (по умолчанию).

Всего передано 58769 байт за 100 запросов.

Тест завершен за 1,004 секунды. Нет неудавшихся запросов.

Запросов в секунду — 99,56. Это считается довольно хорошим числом.

Время на запрос — 100,444 мс (для 10 одновременных запросов). Таким образом, для всех запросов это 100,444 мс / 10 = 10,044 мс.

Скорость передачи — 1338,39 [Кбайт / с] получено.

В статистике времени соединения вы можете заметить, что многим запросам приходилось ждать несколько секунд. Это может быть связано с тем, что веб-сервер apache помещает запросы в очередь ожидания.

В нашем первом тесте мы протестировали приложение (например, www.apache.org), размещенное на другом сервере. В следующей части руководства мы будем тестировать наши примеры веб-приложений, размещенных на том же сервере, с которого мы будем выполнять ab тесты. Это для удобства обучения и демонстрации цели. В идеале, хост-узел и узел тестирования должны отличаться для точного измерения.

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

Построение вывода Apache Bench

Здесь мы представим соответствующий результат, чтобы увидеть, сколько времени занимает сервер по мере увеличения количества запросов. Для этого мы добавим опцию -g в предыдущей команде, за которой следует имя файла (здесь out.data), в котором будут сохранены выходные данные ab —

$ ab -n 100 -c 10 -g out.data https://www.apache.org/

Давайте теперь посмотрим out.data, прежде чем мы создадим сюжет —

$ less out.data

Выход

starttime       seconds ctime   dtime   ttime   wait
Tue May 30 12:11:37 2017        1496160697      40      38      77      13
Tue May 30 12:11:37 2017        1496160697      42      38      79      13
Tue May 30 12:11:37 2017        1496160697      41      38      80      13
...

Давайте теперь разберемся с заголовками столбцов в файле out.data

  • время начала — это дата и время начала разговора.

  • секунд — то же самое, что и время начала, но в формате отметки времени Unix (date -d @ 1496160697 возвращает вывод времени начала).

  • ctime — это время соединения.

  • dtime — это время обработки.

  • ttime — это общее время (это сумма времени ctime и dtime, математически ttime = ctime + dtime).

  • wait — это время ожидания.

время начала — это дата и время начала разговора.

секунд — то же самое, что и время начала, но в формате отметки времени Unix (date -d @ 1496160697 возвращает вывод времени начала).

ctime — это время соединения.

dtime — это время обработки.

ttime — это общее время (это сумма времени ctime и dtime, математически ttime = ctime + dtime).

wait — это время ожидания.

Для наглядной визуализации того, как эти несколько элементов связаны друг с другом, взгляните на следующее изображение —

Несколько предметов

Если мы работаем над терминалом или где графика недоступна, gnuplot — отличный вариант. Мы быстро поймем это, пройдя следующие шаги.

Давайте установим и запустим gnuplot —

$ sudo apt-get install gnuplot  
$ gnuplot

Выход

G N U P L O T
Version 4.6 patchlevel 6    last modified September 2014
Build System: Linux x86_64

Copyright (C) 1986-1993, 1998, 2004, 2007-2014
Thomas Williams, Colin Kelley and many others

gnuplot home:     http://www.gnuplot.info
faq, bugs, etc:   type "help FAQ"
immediate help:   type "help"  (plot window: hit 'h')

Terminal type set to 'qt'
gnuplot>

Поскольку мы работаем над терминалом и предполагаем, что графика недоступна, мы можем выбрать тупой терминал, который будет выводить в ASCII сам терминал. Это помогает нам понять, как выглядит наш сюжет с помощью этого быстрого инструмента. Давайте теперь подготовим терминал для ASCII-сюжета.

gnuplot> set terminal dumb

Выход

Terminal type set to 'dumb'
Options are 'feed  size 79, 24'

Так как наш терминал gnuplot теперь готов к графику ASCII, давайте построим данные из файла out.data

gnuplot> plot "out.data" using 9  w l

Выход

  1400 ++-----+------+-----+------+------+------+------+-----+------+-----++
       +      +      +     +      +      +      +"out.data" using 9 ****** +
       |                                                                   |
  1200 ++                       ********************************************
       |     *******************                                           |
  1000 ++    *                                                            ++
       |     *                                                             |
       |     *                                                             |
   800 ++   *                                                             ++
       |    *                                                              |
       |    *                                                              |
   600 ++   *                                                             ++
       |    *                                                              |
       |    *                                                              |
   400 ++   *                                                             ++
       |    *                                                              |
   200 ++   *                                                             ++
       |    *                                                              |
       +****  +      +     +      +      +      +      +     +      +      +
     0 ++-----+------+-----+------+------+------+------+-----+------+-----++
       0      10     20    30     40     50     60     70    80     90    100

Мы изобразили ttime, общее время (в мс) из столбца 9, относительно количества запросов. Мы можем заметить, что для первых десяти запросов общее время составляло почти 100 мс, для следующих 30 запросов (с 10- го по 40- е ) оно увеличивалось до 1100 мс и так далее. Ваш сюжет должен отличаться в зависимости от ваших out.data .