PHP Web server

Замеры производительности web сервера

ApacheBench - Apache HTTP server benchmarking tool

В разработке web-сервисов наступает момент задержки при открытии страниц или выполнении операций. В такие момент возникают задачи по оптимизации работы приложения. Как оценить на сколько быстрее стала открываться та или иная страница?

Недавно, я для себя открыл простую утилиту ab

ab - это утилита для тестирования пропускной способности вашего HTTP сервера.

Установка

docker-compose.yml

  benchmark:
    build:
      context: ./docker
    container_name: benchmark
    networks:
      - my-network

Dockerfile

FROM alpine:latest

RUN apk add apache2-utils

Запуск

docker-compose run --rm benchmark ab -n 100 -d -r http://nginx/

nginx - имя контейнера nginx.

Параметры утилиты

ab [ -A auth-username:password ] [ -b windowsize ] [ -c concurrency ] [ -C cookie-name=value ] [ -d ] [ -e csv-file ] [ -f protocol ] [ -g gnuplot-file ] [ -h ] [ -H custom-header ] [ -i ] [ -k ] [ -n requests ] [ -p POST-file ] [ -P proxy-auth-username:password ] [ -q ] [ -r ] [ -s ] [ -S ] [ -t timelimit ] [ -T content-type ] [ -u PUT-file ] [ -v verbosity] [ -V ] [ -w ] [ -x <table>-attributes ] [ -X proxy[:port] ] [ -y <tr>-attributes ] [ -z <td>-attributes ] [ -Z ciphersuite ] [http[s]://]hostname[:port]/path
  • -n - количество запросов
  • -c - количество одновременных запросов. По умолчанию 1 запрос за раз.
  • -p - путь до файла, в котором содержатся данные для отправки формы
  • -A - username:password для Basic аутентификации
  • -t - лимит по времени
  • -C cookie-name=value. Отправить куки.

Подробнее: https://httpd.apache.org/docs/2.2/programs/ab.html#options

Gitlab ci

Проверки производительности можно добавить в pipeline проекта.

Тестирование открытой части

open-part:
  stage: benchmark
  image: alpine:latest
  before_script:
    - apk add --no-cache curl apache2-utils
  script:
    - ab -n ${COUNT} -c 20 -d -r https://development.backloger.ru/ru/articles
  variables:
    COUNT: 100
  only:
    - dev
  when: always

Тестирование закрытой части. Для этого можно передать cookie сессии или jwt.

close-part:
  stage: benchmark
  image: alpine:latest
  before_script:
    - apk add --no-cache curl apache2-utils
  script:
    - ab -n ${COUNT} -c 20 -d -r -C ${AUTH_COOKIE} https://development.backloger.ru/ru/control-panel
  variables:
    COUNT: 100
    AUTH_COOKIE: PHPSESSID=483540d1da0657518dd8565e073c9881
  only:
    - dev
  when: always

Вывод

ab benchmark

  • Document Length - размер полученного ответа.
  • Concurrency Level - количество одновременных запросов.
  • Time taken for tests - время от отправки первого запроса до получения последнего ответа.
  • Complete requests - количество успешно обработанных запросов
  • Failed requests - количество ошибочных запросов
  • Total transferred - количество данных переданных по сети в байтах.
  • HTML transferred - количество байтов документа, за исключением данных в заголовках.
  • Requests per second - количество запросов в секунду.
  • Time per request - среднее время на 1 запрос.
  • Transfer rate - скорость передачи данных.
Авторизуйтесь, что бы оставить комментарий!