Авторские статьи Apache Bench – простая+ утилита для нагрузочного тестирования веб-серверов (+ доки)

Discussion in 'Статьи' started by Kuzya, 23 Apr 2009.

  1. Kuzya

    Kuzya Elder - Старейшина

    Joined:
    27 Apr 2008
    Messages:
    166
    Likes Received:
    106
    Reputations:
    30
    Что бы не создавать лишнюю тему перевод документации я положил сразу после статьи



    Автор: Кузьмин Антон (Kuzya)
    Сайт: http://kuzya.name/
    Дата: 16-04-2009

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

    Официальная документация: http://httpd.apache.org/docs/2.0/programs/ab.html
    Русский перевод документации:http://kuzya.name/2009/04/16/перевод-официальной-документации-
    apache-bench/
    Здравствуйте. В этой статье я расскажу об одном интересном инструменте — Apache Bench (далее AB). Данная утилита входит в стандартный дистрибутив Apache. Кроме того, имеется почти во всех готовых сборках типа Denwer, XAMMP и т.д. Как сказано в названии статьи, AB предназначается для нагрузочного тестирования веб-серверов. Суть его в том что бы посылать на сервер определённое количество http-запросов, замеряя при этом время их обработки. С его помощью можно выявить те участи сайта которые выполняются дольше других, и могут являться целью DoS-атаки или просто причиной большой нагрузки на сервер при нормальной активности пользователей.
    Возьмёмся сразу за практику. Найти AB Вы можете в установочной директории Apache, в папке «bin». Он имеет имя «ab» (или ab.exe для Windows) Запуск и работа с ним происходит через командную строку. Просто запустите его, без указания каких-либо опций, и покажется справка. Для рабочего старта AB требуется как минимум одно — URI к которому нужно произвести обращение. Будет послан всего 1
    GET-запрос, после чего Вы увидите отчёт о проделанной работе. Что бы осуществить несколько
    запросов Вам нужно задать параметр -n, в котором и указать их количество. То есть при вот таком
    запуске
    утилита произведёт 100 запросов по URI http://site.ru/search.php?q=one. Причём проходить они будут по
    очереди. Для более продуктивного анализа следует использовать параметр -c, определяющий количество одновременно посылаемых обращений. Например запуск AB следующей строкой проделает то же самое что и в предыдущем примере, но запросы будут уходить не поочерёдно, а пачками по 10 штук.
    Легко подсчитать что в случае такого обращения к ресурсоёмкому участку сайта нагрузка значительно
    возрастёт, что будет отчётливо отражено в результатах работы утилиты. Такое многопоточное
    тестирование предпочтительнее т.к. может имитировать более-менее реальные условия (не DoS-атаки конечно, простого поведения нескольких пользователей). К тому же оно даём возможность обнаружить «тяжёлые» участки сайта быстрее.
    При работе с POST используется опция -T, указывающая поле «content-type» в заголовке запроса
    и опция -p, содержащая имя файла с POST-данными. Для осуществления простейшего POST-запроса в
    параметре -Т, как и в браузере, указывается строка «application/x-www-form-urlencoded». Файл, содержащий отправляемые данные, может иметь любое расширение. Главное что бы данные там были
    расположены в том виде, в котором они помещаются в запрос. То есть
    Допустим нам нужно послать 10 POST-запросов к URI http://site.ru/search.php, данные для которых
    хранятся в файле request.txt, на диске «C». Тогда строка запуска программы будет следующая:
    Как видите — ничего сложного.
    Рассмотрим теперь результат работы AB. Ниже приведён пример отчёта о посылке 1000 запросов
    на URI «http://e107/signup.php» по 10 запросов за один раз (строка запуска: «ab -n 1000 -c 10
    http://e107/signup.php») .
    С самого начала выводятся авторские права на утилиту и её версия. Дальше располагается множество строчек типа «Complited *00 requests». Так программа сообщает о выполнении каждой сотни запросов.
    В конце этого списка находится строка с сообщением об окончании проверки.
    И теперь начинается основная информативная часть отчёта. Первые 3 строки — тип и версия веб-сервера, тестируемый хост и порт. Дальше идёт информация о запрашиваемом URL – путь и размер данных получаемых в ответ. Затем следуют данные о произведённых запросах. Поочерёдно: количество
    запросов посылаемых одновременно, время потраченное на тестирование, общее количество запросов и число неудачных обращений (сервер не ответил, время ожидания ответа истекло). Следующим блоком показана информация о передаче данных между клиентом и сервером. По порядку. Количество ошибок при отправке данных. Сколько всего данных было передано, сколько всего HTML-данных было
    передано. Второе всегда меньше первого по двум причинам — за общий объём данных считаются
    заголовки запроса и HTML-код, за общий объём считается любая информация если Вы производили
    обращения не к HTML-документам. Дальше указано среднее количество запросов в секунду и среднее
    время в миллисекундах, затрачиваемое на один запрос. Здесь 2 значения затраченного времени - фактически и без учёта конкурентных запросов. Эти значения всегда отличаются не сильно и большого значения разница между ними не имеет. Ну и кончается этот блок записью о среднем объёме передаваемых данных за секунду.
    Предпоследняя часть отчёта — информация о проведённых во время тестирования соединениях.
    В левой части находятся названия строк — соединение, обработка, ожидание, общее время. А в самой
    таблице содержится минимальное, среднее, и максимальное время прохождения этих событий.
    Последняя информация, помещаемая в отчёт, содержит соотношения времени выполнения запросов к их процентам. То есть указано сколько процентов запросов было выполнено за определённое время. В
    нашем случае эти данные будут читаться так — 50% запросов было выполнено в пределах 1468 миллисекунд, 66% - в пределах 1625 миллисекунд, 75% - в пределах 1718 миллисекунд и т.д.
    Вот такой простой, но полезный инструмент. В умелых руках может быть крайне эффективным. Главное
    он очень прост и лёгок в освоении, что хорошо для новичков. Последней версией AB поддерживается
    25 параметров, часть из которых чисто «косметические». Единственный недостаток который я бы отметил это отсутствие возможности производить запросы сразу по нескольким URL. Но это нужно не
    всегда. В конце концов для серьёзных тестирований есть соответствующий софт. Удачи!



    Оригинальная версия: http://httpd.apache.org/docs/2.2/programs/ab.html
    Перевёл: Кузьмин Антон (Kuzya)
    Дата: 16-04-2009

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

    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 параметры_тега_<table> ] [ -X proxy[:port] ] [ -y
    параметры_тега_<tr> ] [ -z параметры_тега_<td> ] [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 <table>-параметры
    Строка параметров для тега <table>. Они вставляются в тег следующим образом - «<table здесь >».
    -X адрес-прокси[:порт]
    Использовать PROXY-сервер
    -y <tr>-параметры
    Строка с параметрами для тега <tr> (аналогично -х).
    -z <td>-параметры
    Строка параметров для тега <td> (аналогично -х).

    Известные баги
    В некоторых местах программы имеются ограничения на длину данных поступающих от пользователя
    (к примеру, в виде параметров), сервера (например в виде ответа) и прочих внешних источников.
    Проблемы от этого встречаются редко, но возможно коснутся и Вас.
    Программа не поддерживает HTTP/1.x полностью; Она понимает лишь несколько стандартных форм
    ответов. Использование strstr(3) влечёт за собой определённые проблемы, то есть может сложится такая
    ситуация что будет замерено не время работы сервера, а время работы AB. (В точном переводе этой
    опции я не уверен. Обратитесь пожалуйста к официальной документации. - п.п)
     
    3 people like this.
  2. Pernat1y

    Pernat1y Elder - Старейшина

    Joined:
    20 Dec 2007
    Messages:
    479
    Likes Received:
    79
    Reputations:
    7
    прога для ДоСа веб серверов от разработчиков апача? оригинально )
     
  3. Kuzya

    Kuzya Elder - Старейшина

    Joined:
    27 Apr 2008
    Messages:
    166
    Likes Received:
    106
    Reputations:
    30
    Я не думаю что её можно использовать для DoS`a. Разве что нацеливать на крайне слабые серверы.