ab (Apache Bench) - утилита проверки производительности Apache, Nginx, LSWS

ab (Apache Bench) - утилита проверки производительности Веб серверов, например Apache, Nginx, LiteSpeed Web Server (LSWS). В последних версиях ab поддерживает https протокол. Документация ab - Apache HTTP server benchmarking tool. ab устанавливается вместе с сервером Apache, например, для Ubuntu вы можете установить его с помощью команды

apt install apache2-utils

Apache Bench (ab) пригодится для быстрой и грубой оценки производительности веб-сервера, так что если нужно получить более приближенные к реальности данные, придется воспользоваться дополнительными утилитами Оптимизация Веб-Сайта нагрузочное тестирование при помощи httpstat, ab, Httperf, Tsung.

Утилита ab подходит как для простого, так и продвинутого тестирования. Проверка максимального количества запросов с TLS:

ab -c 50 -n 10000 -f TLS1.2 -H "Accept-Encoding: gzip,deflate" https://somesite.com/

Команда выполнила 10 000 запросов в 50 потоков и показала скорость и обработанное количество запросов:

Total transferred:      59560000 bytes
HTML transferred:       52160000 bytes
Requests per second:    816.77 [#/sec] (mean)
Time per request:       122.434 [ms] (mean)
Time per request:       2.449 [ms] (mean, across all concurrent requests)
Transfer rate:          2375.33 [Kbytes/sec] received

Из этого отчета самыми важными данными будут:

  • Requests per second — количество запросов в секунду. К примеру если страница состоит из 20 частей (CSS, картинки и HTML), то в нашем примере сервер способен обработать около 40 одновременных пользователей в секунду.
  • Time per request (mean) — среднее время на выполнение группы параллельных запросов (в нашем случае 50);
  • Time per request (mean, across all concurrent requests) — среднее время на выполнение одного запроса.

Примеры использование Apache Bench для тестирования нагрузки на веб-сервер.

  • Пример 1:
    ab -c7 -n200 http://example.com/index.php
    или со *
    ab -n 100 -c 20 https://example.com/*

Где

  • -с7 - количество одновременных(конкурирующих) запросов к Веб серверу;
  • -n200 - общее количество запросов в тесте;
  • Пример использования:
    ab -n 100 -c 10 -t 5 http://examle.com/

    При таком запуске apache bench, будут выполняться 100 запросов, параллельно будут работать 10 запросов. 5 секунд - ограничение по времени на все запросы, те из них которые не отработают в течении этого времени выполнены не будут.

Чтобы проверить, выдерживает ли ваш сайт 5000 посетителей в сутки с помощью утилиты Apache Bench (ab), вам нужно запустить

ab -n 5000 -c 100 -k URL_вашего_сайта
  • -n 5000 указывает Apache Bench на количество запросов, которые необходимо выполнить (в данном случае 5000).
  • -c 100 определяет количество одновременных соединений (посетителей), которые будут созданы одновременно..
  • -k это флаг KeepAlive, который позволяет использовать одно соединение для нескольких запросов, что может быть полезно в реальных сценариях использования.

После завершения теста вы получите результаты, включая скорость запросов, количество успешных и неуспешных запросов, среднее время ответа и т.д. Если результаты соответствуют вашим ожиданиям и сайт успешно обрабатывает 5000 запросов в сутки, то ваш сайт прошел проверку.

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

Ниже представлен список поддерживаемых опций ab, изучите их

-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 HTTP заголовок для методов POST/PUT. По умолчанию text/plain
-w              Вывести результат в виде HTML.
-C attribute    Добавить cookie, например  'Apache=1234'
-H attribute    добавить произвольную строку заголовка, например 'Accept-Encoding: gzip'
-A attribute    Использовать Basic WWW Authentication, например -A user pass
-P attribute    Использовать аутентификацию на Proxy, например -P proxyuser proxypass
-X proxy:port   Указать Proxy сервер
-V              Отобразить версию ab
-k              Использовать KeepAlive
-l              Разрешить изменяемую длину документа. Используйте для динамических страниц.
-g filename     Сохранить результат в формате gnuplot.
-e filename     Сохранить результат в CSV.
-r              Не прекращать тест при ошибках передачи.
-h              Отобразить справку
-f protocol     Указать протокол. (SSL3, TLS1, TLS1.1, TLS1.2 или ALL)

Предположим, вы хотите одновременно протестировать несколько URL-адресов? Для этого создайте сценарий оболочки с несколькими вызовами ab. В конце каждой строки поместите &, это заставит команду работать в фоновом режиме и позволит начать выполнение следующей команды. Также давайте перенаправим вывод в файл для каждого URL-адреса, используя перенаправление. Например:

#!/bin/sh
 
ab -n 100 -c 10 https://dieg.info/ > test1.txt &
ab -n 100 -c 10 https://wow2.top/ > test2.txt &

Если вы хотите просто протестировать работу вашего PHP, достаточно создать файл с содержанием и запустить на него тест. Если при наращивании конкурентных запросов вы получаете ошибку

socket: Too many open files

настройте переменную ядра Руководство по использованию команды ulimit в Linux: Настройка ограничений системных ресурсов, например так

ulimit -n 10240
Обзор игрового хостинга Realms Hosting: Minecraft, RUST, Counter-Strike. PQ VPS сервера в 28+ странах.