Apache Bench

Материал из Webko Wiki
Перейти к навигации Перейти к поиску

Установка на CentOS

yum install httpd-tools

Установка на FreeBSD

/usr/ports/benchmarks/siege
make install cleam


Apache Bench – простая утилита для нагрузочного тестирования веб-серверов.

Здравствуйте. В этой статье я расскажу об одном интересном инструменте — Apache Bench (далее AB). Данная утилита входит в стандартный дистрибутив Apache. Кроме того, имеется почти во всех готовых сборках типа Denwer, XAMMP и т.д. Как сказано в названии статьи, AB предназначается для нагрузочного тестирования веб-серверов. Суть его в том что бы посылать на сервер определённое количество http-запросов, замеряя при этом время их обработки. С его помощью можно выявить те участи сайта которые выполняются дольше других, и могут являться целью DoS-атаки или просто причиной большой нагрузки на сервер при нормальной активности пользователей. Возьмёмся сразу за практику. Найти AB Вы можете в установочной директории Apache, в папке «bin». Он имеет имя «ab» (или ab.exe для Windows) Запуск и работа с ним происходит через командную строку. Просто запустите его, без указания каких-либо опций, и покажется справка. Для рабочего старта AB требуется как минимум одно — URI к которому нужно произвести обращение. Будет послан всего 1 GET-запрос, после чего Вы увидите отчёт о проделанной работе. Что бы осуществить несколько запросов Вам нужно задать параметр -n, в котором и указать их количество. То есть при вот таком запуске

ab -n 100 http://site.ru/search.php?q=one

утилита произведёт 100 запросов по URI http://site.ru/search.php?q=one. Причём проходить они будут по очереди. Для более продуктивного анализа следует использовать параметр -c, определяющий количество одновременно посылаемых обращений. Например запуск AB следующей строкой проделает то же самое что и в предыдущем примере, но запросы будут уходить не поочерёдно, а пачками по 10 штук.

ab -n 100 -с 10 http://site.ru/search.php?q=one

Легко подсчитать что в случае такого обращения к ресурсоёмкому участку сайта нагрузка значительно возрастёт, что будет отчётливо отражено в результатах работы утилиты. Такое многопоточное тестирование предпочтительнее т.к. может имитировать более-менее реальные условия (не DoS-атаки конечно, простого поведения нескольких пользователей). К тому же оно даём возможность обнаружить «тяжёлые» участки сайта быстрее. При работе с POST используется опция -T, указывающая поле «content-type» в заголовке запроса и опция -p, содержащая имя файла с POST-данными. Для осуществления простейшего POST-запроса в параметре -Т, как и в браузере, указывается строка «application/x-www-form-urlencoded». Файл, содержащий отправляемые данные, может иметь любое расширение. Главное что бы данные там были расположены в том виде, в котором они помещаются в запрос. То есть

параметр1=значение1&параметр2=значение2&......&параметрN=значениеN

Допустим нам нужно послать 10 POST-запросов к URI http://site.ru/search.php, данные для которых хранятся в файле request.txt, на диске «C». Тогда строка запуска программы будет следующая:

ab -T "application/x-www-form-urlencoded" -p "C:\request.txt" -n 10 http://site.ru/search.php

Как видите — ничего сложного. Рассмотрим теперь результат работы AB. Ниже приведён пример отчёта о посылке 1000 запросов на URI «http://e107/signup.php» по 10 запросов за один раз

(строка запуска: «ab -n 1000 -c 10 http://e107/signup.php») .
This is ApacheBench, Version 2.0.40-dev <$Revision: 1.146 $> apache-2.0
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright 2006 The Apache Software Foundation, http://www.apache.org/
Benchmarking e107 (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Finished 1000 requests
Server Software: Apache/2.2.4
Server Hostname: e107
Server Port: 80
Document Path: /signup.php
Document Length: 26036 bytes
Concurrency Level: 10
Time taken for tests: 149.937500 seconds
Complete requests: 1000
Failed requests: 38
(Connect: 0, Length: 38, Exceptions: 0)
Write errors: 0
Total transferred: 25253856 bytes
HTML transferred: 25059058 bytes
Requests per second: 6.67 [#/sec] (mean)
Time per request: 1499.375 [ms] (mean)
Time per request: 149.938 [ms] (mean, across all concurrent requests)
Transfer rate: 164.48 [Kbytes/sec] received
Connection Times (ms)
min mean [+/-sd] median max
Connect: 15 42 17.8 46 125
Processing: 484 1435 384.5 1437 3047
Waiting: 484 1419 381.3 1406 3046
Total: 515 1477 383.4 1468 3140
Percentage of the requests served within a certain time (ms)
50% 1468
66% 1625
75% 1718
80% 1781
90% 1968
95% 2093
98% 2296
99% 2437
100% 3140 (longest request)

С самого начала выводятся авторские права на утилиту и её версия. Дальше располагается множество строчек типа «Complited *00 requests». Так программа сообщает о выполнении каждой сотни запросов.

В конце этого списка находится строка с сообщением об окончании проверки.

И теперь начинается основная информативная часть отчёта. Первые 3 строки — тип и версия веб-сервера, тестируемый хост и порт. Дальше идёт информация о запрашиваемом URL – путь и размер данных получаемых в ответ. Затем следуют данные о произведённых запросах. Поочерёдно: количество запросов посылаемых одновременно, время потраченное на тестирование, общее количество запросов и число неудачных обращений (сервер не ответил, время ожидания ответа истекло). Следующим блоком показана информация о передаче данных между клиентом и сервером. По порядку. Количество ошибок при отправке данных. Сколько всего данных было передано, сколько всего HTML-данных былопередано. Второе всегда меньше первого по двум причинам — за общий объём данных считаются заголовки запроса и HTML-код, за общий объём считается любая информация если Вы производили обращения не к HTML-документам. Дальше указано среднее количество запросов в секунду и среднее время в миллисекундах, затрачиваемое на один запрос. Здесь 2 значения затраченного времени - фактически и без учёта конкурентных запросов. Эти значения всегда отличаются не сильно и большого значения разница между ними не имеет. Ну и кончается этот блок записью о среднем объёме передаваемых данных за секунду. Предпоследняя часть отчёта — информация о проведённых во время тестирования соединениях. В левой части находятся названия строк — соединение, обработка, ожидание, общее время. А в самой таблице содержится минимальное, среднее, и максимальное время прохождения этих событий. Последняя информация, помещаемая в отчёт, содержит соотношения времени выполнения запросов к их процентам. То есть указано сколько процентов запросов было выполнено за определённое время. В нашем случае эти данные будут читаться так — 50% запросов было выполнено в пределах 1468 миллисекунд, 66% - в пределах 1625 миллисекунд, 75% - в пределах 1718 миллисекунд и т.д. Вот такой простой, но полезный инструмент. В умелых руках может быть крайне эффективным. Главное он очень прост и лёгок в освоении, что хорошо для новичков. Последней версией AB поддерживается 25 параметров, часть из которых чисто «косметические». Единственный недостаток который я бы отметил это отсутствие возможности производить запросы сразу по нескольким URL. Но это нужно не всегда. В конце концов для серьёзных тестирований есть соответствующий софт. Удачи!


ab – Утилита для нагрузочного тестирования Apache-серверов. MAN

AB — это утилита для нагрузочного тестирования веб-серверов Apache. Он специально создан для того что бы Вы могли проанализировать стойкость своего веб-сервера к большим нагрузкам. В частности он может показать сколько одновременных запросов сервер может выдержать. Синтаксис запуска ab [ -A логин:пароль ] [ -c кол-во_параллельных_запросов ] [ -C имя_cookie=значчение ] [ -d ] [ -e csv- файл ] [ -g gnuplot-файл ] [ -h ] [ -H заголовок ] [ -i ] [ -k ] [ -n кол-во_запросов ] [ -p POST-файл ] [ -P proxy-логин:пароль ] [ -q ] [ -s ] [ -S ] [ -t лимит_времени ] [ -T content-type ] [ -v

режим_вывода_отчётности] [ -V ] [ -w ] [ -x параметры_тега_

] [ -X proxy[ort] ] [ -y параметры_тега_ ] [ -z параметры_тега_
] [http://]хост[:порт]/путь

Допустимые опции

-A логин:пароль

Опция позволяет включить поддержку аутентификации. Имя пользователя и пароль разделяются одиночным символом «:» и при передаче кодируются по алгоритму base64. Строка с данными авторизации посылается серверу всегда, вне зависимости от его требований (например ответе «401 требуется авторизация»)

-c количество

Количество запросов посылаемых параллельно за один раз. По умолчанию этот параметр равен единице.

-C имя-cookie=значение

Устанавливает строку Cookie в заголовке запроса. Значение этого параметра должно передаваться в виде «имя=значение». Параметр может быть использован несколько раз.

-d

Не показывать таблицу соотношения количества запросов к времени их выполнения. (Поумолчанию она выводится в конце отчёта).

-e имя-csv-файла

Записывает в CSV-виде (значения разделённые запятой) данные о времени выполнения каждого запроса. Опция будет более полезной если Вы создаёте отчёт в виде 'gnuplot'-файла.

-g имя-gnuplot-файла

Записать всю полученную информацию в файл в формате 'gnuplot' или TSV (значения разделённые tab`ом) . Файл может быть легко импортировав в следующие пакеты: Gnuplot, IDL, Mathematica, Igor или даже Excel. Названия колонок помещаются в самой первой строке файла.

-h

Показ справки.

-H заголовок

Добавляет какое-либо поле в заголовок запроса. Значение этого параметра должно быть в виде правильного заголовочного поля и значения, отделённого двоеточием (например "Accept-Encoding: zip/zop;8bit").

-i

Использовать HEAD-запросы вместо GET.

-k

Использовать HTTP KeepAlive. То есть производить множество запросов в рамках одной HTTP- сессии. По умолчанию эта опция отключена.

-n количество запросов

Количество запросов которое будет отправлено при тестировании. По умолчанию этот параметр равен единице, что может использоваться для проверки работоспособности AB и доступности для него сервера.

-p путь-к-файлу-с-POST-данными

Путь к файлу содержащему данные для POST-запроса.

-P имя-пользователя:пароль

Включение авторизации для Proxy-серверов. Логин и пароль разделяются одиночным двоеточием («:») и посылаются в виде закодированной base64-строки. Строка посылается всегда, вне зависимости от требований сервера (например ответа с заголовком «407 требуется авторизация для proxy-сервера»).

-q

Когда при тестировании требуется отправить больше 150 запросов AB показывает подробный ход их отправки. Как только отправляется 10% из них (минимальный порог — 100 запросов) то программа выводит соответствующее уведомление. Данная опция отключает этот вывод.

-s

Если AB собран с поддержкой SSL (это можно увидеть вызвав утилиту с опцией -h) то эта опция указывает ему использовать HTTPS вместо HTTP. Функция сейчас находится в стадии тестирования, поэтому мы не рекомендуем её использовать.

-S

Не показывать информацию об ошибках, предупреждениях и отклонениях в поведении. (В точном переводе этой опции я не уверен. Обратитесь пожалуйста к официальной документации. - п.п)

-t timelimit

Максимальное время проведения тестирования. Например эту опцию можно использовать с указанием количества запросов в 50000. За указанное время программа постарается произвести заданное количество обращений. По умолчанию этот лимит не устанавливается.

-T content-type

Поле «Content-type» при отправке POST-запросов.

-v уровень-вывода-отчётов

Устанавливает уровень вывода отчётности. При уровне 4 выводится информация о заголовках. При уровне 3 - код ответа (404, 200, и т.д.). При уровне 2 - информация о различных предупреждениях/ ошибках и т.д.

-V

Показать номер текущей версии и выйти.

-w

Печатать ответ в виде HTML-таблицы. По умолчанию таблица состоит из 2 колонок и имеет белый фон.

-x -параметры Строка параметров для тега
. Они вставляются в тег следующим образом - «
». -X адрес-прокси[:порт] Использовать PROXY-сервер -y -параметры Строка с параметрами для тега (аналогично -х). [b]-z
-параметры Строка параметров для тега (аналогично -х).