Что бы не создавать лишнюю тему перевод документации я положил сразу после статьи Автор: Кузьмин Антон (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[ort] ] [ -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. (В точном переводе этой опции я не уверен. Обратитесь пожалуйста к официальной документации. - п.п)