Нагрузочное тестирование веб-сервера очень важно для оценки того, как он ведет себя под определенной нагрузкой, особенно перед развертыванием в реальной среде. ApacheBench, широко известный как ab, - это широко используемый инструмент для нагрузочного тестирования HTTP-серверов. Он обеспечивает простой способ создания большого количества запросов и вычисления количества запросов, обслуживаемых в секунду, задержки и других соответствующих показателей.
ApacheBench предустановлен на многих системах на базе UNIX и является частью пакета HTTP-сервера Apache. Он легкий, простой в использовании и настраивается в соответствии с требованиями теста. Он помогает выявить потенциальные узкие места, гарантируя, что ваш веб-сервер сможет выдержать ожидаемое количество одновременных соединений.
Независимо от того, используете ли вы Apache, Nginx или любой другой HTTP-сервер, ApacheBench можно использовать для проведения тщательного тестирования. Вы можете итеративно запускать тесты и, соответственно, настраивать конфигурацию вашего веб-сервера.
Шаги по нагрузочному тестированию веб-сервера с помощью ab
Убедитесь, что ApacheBench установлен в вашей системе.
1 | ab -V |
Установите apache2-utils, если ab не установлен.
1 | sudo apt update && sudo apt install --assume-yes apache2-utils |
1 | sudo yum install --assumeyes httpd-tools |
Получите URL-адрес веб-страницы, на которой нужно провести нагрузочный тест.
Запустите ab на выбранной веб-странице.
1 | ab -n 1000 -c 10 https://www.example.com/ |
Формат запроса: ab -n <число_запросов> -c <количество потоков>.
Это базовый пример выполнения теста производительности, который в данном случае заключается в отправке 1000 запросов на веб-сервер с 10 запросами, отправляемыми одновременно.
Обязательно добавьте (прямой) слеш (/) в конце URL-адреса, иначе он не будет распознан командой
Проанализируйте полученные результаты, чтобы понять показатели производительности.
Основные показатели, на которые следует обратить внимание, - это количество запросов в секунду (Requests per second), время выполнения запроса (Time per request) и количество неудачных запросов (Failed requests).
1 2 3 | Requests per second: 78.87 [#/sec] (mean) Time per request: 126.790 [ms] (mean) Failed requests: 0 |
Тестирование с включением режима KeepAlive снижает накладные расходы сети за счет совместного использования одной HTTP-сессии для всех запросов.
1 | ab -n 1000 -c 10 -k https://www.example.com/ |
Используйте различные уровни параллелизма, количество запросов или дополнительные опции, такие как тестирование POST-данных или пользовательских HTTP-заголовков, чтобы имитировать различные сценарии.
Проанализируйте и интерпретируйте результаты, чтобы оценить поведение сервера под нагрузкой, выявить узкие места и потенциальные области для улучшения.
Опции ApacheBench (ab)
Использование:
1 | ab [options] [http[s]://]имя хоста[:порт]/путь |
Опции следующие:
- -n requests - Количество выполняемых запросов
- -c concurrency - Количество запросов, выполняемых одновременно
- -t timelimit - Максимальное количество секунд, которое можно потратить на бенчмаркинг
- -s timeout - Максимальное время ожидания каждого ответа. По умолчанию 30 секунд
- -b windowsize - Размер буфера отправки/получения TCP, в байтах
- -B address - Адрес, к которому следует привязываться при создании исходящих соединений
- -p postfile - Файл, содержащий данные для POST. Не забудьте также установить -T
- -u putfile - Файл, содержащий данные для PUT. Не забудьте также установить -T
- -T content-type - Заголовок типа содержимого, используемый для данных POST/PUT, например 'application/x-www-form-urlencoded'. По умолчанию - 'text/plain'
- -v verbosity - Сколько информации об устранении неполадок выводить.
- -w - Выводить результаты в HTML-таблицах
- -i - Использовать HEAD вместо GET
- -x атрибуты - Строка для вставки в качестве атрибутов таблицы
- -y атрибуты - Строка для вставки в качестве атрибутов tr
- -z атрибуты - Строка для вставки в качестве атрибутов td или th
- -C атрибут - Добавить cookie, например, 'Apache=1234'. (повторяется)
- -H атрибут - Добавляет произвольную строку заголовка, например 'Accept-Encoding: gzip'. Вставляется после всех обычных строк заголовков. (повторяется)
- -A атрибут - Добавить базовую WWW-аутентификацию, атрибуты это имя пользователя и пароль, разделенные двоеточием.
- -P атрибут - Добавить базовую аутентификацию прокси-сервера, атрибуты: имя пользователя и пароль, разделенные двоеточием.
- -X proxy:port - Прокси-сервер и номер порта для использования
- -V - Вывести номер версии и выйти
- -k - Использовать функцию HTTP KeepAlive
- -d - Не показывать перцентили, обслуживаемые таблицей.
- -S - Не показывать доверительные оценки и предупреждения.
- -q - Не показывать прогресс при выполнении более 150 запросов
- -l - Принимать переменную длину документа (используйте это для динамических страниц)
- -g имя_файла- Вывод собранных данных в файл формата gnuplot.
- -e имя_файла - Вывод CSV-файла с процентными показателями
- -r - Не завершать работу при ошибках получения сокета.
- -m метод - Имя метода
- -h - Вывести информацию об использовании (это сообщение)
- -I - Отключить расширение TLS Server Name Indication (SNI)
- -Z набор шифров - Укажите набор шифров SSL/TLS (см. openssl ciphers)
- -f протокол - Укажите протокол SSL/TLS (SSL2, TLS1, TLS1.1, TLS1.2 или ALL)
- -E файл_сертифката - Укажите дополнительную цепочку сертификатов клиента и закрытый ключ
Советы по нагрузочному тестированию веб-сервера с помощью ab
- Это ни в коем случае не имитирует реальное использование. Для этого могут больше подойти другие инструменты, такие как Apache's JMeter.
- ab не следует запускать на той же машине, что и веб-сервер. ab требователен к ресурсам, поэтому его использование негативно скажется на производительности веб-сервера и исказит результаты тестирования.
- Различные факторы могут улучшить производительность сервера. Лучше всего провести несколько тестов и усреднить результат.