Различия

Показаны различия между двумя версиями страницы.


Предыдущая версия
instrumenty_dlja_provedenija_nagruzochnogo_testirovanija [2025/07/06 12:39] (текущий) – внешнее изменение 127.0.0.1
Строка 1: Строка 1:
 +====== Инструменты httpstat, ab, Httperf, Tsung для проведения нагрузочного тестирования сайта ======
 +~~Title: Оптимизация Веб-Сайта нагрузочное тестирование при помощи httpstat, ab, Httperf, Tsung ~~
 +{{htmlmetatags>
 +metatag-description=(Выбор лучшего инструмента для нагрузочного тестирования может быть сложным. Сравните httpstat, Apache Bench (ab), Httperf, и Tsung для обеспечения максимальной производительности и стабильности вашего сайта.)
 +}}
 +
 +
 +Инструменты для проведения нагрузочного тестирования скриптов [[PHP|PHP]], веб -серверов [[Apache|Apache]], [[Nginx|Nginx]], [[LiteSpeed|LiteSpeed]] Web Server.
 +
 +===== Быстрое тестирование нагрузки на сайт =====
 +Нагрузочное тестирование сайта — это процесс проверки производительности и надёжности веб-сайта или приложения путём создания условий, максимально приближенных к реальным, и проверки его поведения при большой нагрузке.
 +
 +Пока ваш сайт ещё достаточно молод, но нацелен на широкую аудиторию, то весьма сложно понять насколько мощное серверное оборудование требуется. Так что лучшим решением при [[https://dieg.info/proverennye-hostingi-dlya-sayta/|выборе хостинга]] будет симуляция потока пользователей при помощи синтетических тестов.
 +
 +Так же бывает необходимо нагрузить сайт для выявления ошибок, которые появляются только при нагрузке на сервер.
 +
 +
 +===== 1. Apache Bench (ab) =====
 +Подробно о бенчмарк утилите Apache Bench (ab) для анализа производительности HTTP серверов, например Apache, Nginx читайте в статье [[ab]].
 +
 +
 +
 +===== 2. Httperf =====
 +Утилита httperf, как и ab, проста в использовании, обладает достаточно широким функционалом и запускается также из ксомадной строки Linux.
 +
 +Создание 100 000 сессий (по 5 вызовов через каждые 2 с) со скоростью 1000:
 +<file bash>
 +httperf --hog --server somesite.com --wsess=100000,5,2 --rate 1000 --timeout 5
 +</file>
 +<file bash>
 +Connection rate: 1055.0 conn/s (0.9 ms/conn, <=1022 concurrent connections)
 +Connection time [ms]: min 0.3 avg 865.9 max 7912.5 median 459.5 stddev 993.1
 +Connection time [ms]: connect 31.1
 +Connection length [replies/conn]: 1.000
 +Request rate: 1966.6 req/s (0.5 ms/req)
 +Request size [B]: 91.0
 +Reply rate [replies/s]: min 59.4 avg 1060.3 max 1639.7 stddev 475.2 (22 samples)
 +</file>
 +
 +В отчете утилиты стоит сфокусироваться на:
 +
 +  * **Connection rate** — реальная скорость создания новых соединений. Она показывает способность сервера обрабатывать соединения, то есть в нашем случае до 1055 соед./с, но не более 1022 одновременных соединений.
 +  * **Connection time [ms]** — время “жизни” успешных соединений между инициализацией и закрытием. Опять же показывает производительность сервера при обработке большого количества соединений.
 +  * **Request rate** — скорость обработки запросов. То есть, количество запросов, которые сервер способен выполнять за секунду, показывает отзывчивость веб-приложения.
 +
 +===== 3. Tsung =====
 +Tsung мощная, продвинутая, мультизадачная и мультипоточная утилита. Tsung написан на Erlang Инструмент может использоваться для нагрузки серверов HTTP, WebDAV, SOAP, PostgreSQL, MySQL, LDAP и Jabber/XMPP. Поддерживается SSL, мониторинг ресурсов системы и агенты SNMP, Munin или Erlang на удаленных серверах, симуляция поведения юзеров и расширенные отчеты.
 +
 +В Ubuntu 20.04.3 LTS утилита Tsung  присутствует в репозитории, ищем командой apt
 +<file bash>
 +# apt search ^tsung
 +Sorting... Done
 +Full Text Search... Done
 +tsung/focal 1.7.0-3.1 amd64
 +  distributed multi-protocol load testing tool
 +</file>
 +Установка tsung
 +<file bash>
 +apt install tsung
 +</file>
 +
 +Программе tsung нужно передать файл с описанием сценария теста. Вот пример простого тестового сценария:
 +<file xml tsung.xml>
 +<?xml version="1.0"?>
 +<!DOCTYPE tsung SYSTEM "/usr/share/tsung/tsung-1.0.dtd">
 +<tsung loglevel="debug" version="1.0">
 +  <clients>
 +    <client host="localhost" use_controller_vm="true" maxusers="64000" />
 +  </clients>
 + 
 +  <servers>
 +    <server host="localhost" port="8087" type="tcp" /> 
 +  </servers>
 + 
 +  <load>
 +    <arrivalphase phase="1" duration="60" unit="second">
 +        <users maxnumber="64000" arrivalrate="2500" unit="second" />
 +    </arrivalphase>
 +  </load>
 + 
 +  <options>
 +    <option name="ports_range" min="1025" max="65535"/>
 +  </options>
 + 
 +  <sessions>
 +    <session name="websocket" probability="100" type="ts_websocket">
 +        <request>
 +             <websocket type="connect" path="/comet-server/ws/sesion=&amp;myid=&amp;devid=0&amp;v=3.24&amp;uuid=48wTOvoa-uEtC0thHzBkIKir14sXgkOy&amp;api=js"></websocket>
 +        </request>
 + 
 + 
 +        <for var="i" from="1" to="20000" incr="1">
 +          <thinktime value="150"/>
 +        </for>
 + 
 +        <request>
 +            <websocket type="close"></websocket>
 +        </request>
 +    </session>
 +  </sessions>
 +</tsung>
 +</file>
 +
 +В нём указано что к localhost к порту 8087 надо подключатся по вебсокетам. И создавать по 2500 тысячи подключений каждую секунду до тех пор, пока их в сумме не наберётся 64000.
 +
 +То есть этот сценарий просто создаёт тестовую нагрузку в 64000 пользователей онлайн. Тест синтетический и реальные 64000 будут нагружать сервер несколько по другому, а не просто висеть онлайн, но это уже от приложения и предполагаемого сценария использования комет сервера можно составить свой сценарий тестирования, который бы отражал ваш тип нагрузки на комет сервер.
 +
 +**Нагрузка в 64000 это максимум** который позволит создать операционная система. Если хотите больше, то надо тестировать один сервер с нескольких машин с tsung одновременно. TCP-соединение уникально определяется четверкой [source ip, source port, dest ip, dest port], таким образом с одной машины на 1 порт сервера можно создать не более 64 тыс одновременных соединений
 +
 +
 +Отчет будет состоять из графиков и важной дополнительной информации. В нем стоит обратить внимание на:
 +
 +  * Session — общее количество пользователей и количество одновременных сессий в секунду, которые веб-сервер обработал.
 +  * Request — время отклика веб-сервера, его способность и скорость обработки одновременных запросов. К примеру 200 запросов/с значит, что в среднем 10 пользователей сможет одновременно получить зайти на веб-страницу, состоящую в общем из 20 компонентов (CSS, картинки и HTML). А это более 400 000 посетителей за 12 часов.
 +  * Connect — время, требуемое на подключение, то есть отзывчивость веб-сервера.
 +===== 4. httpstat удобный инструмент для анализа загрузки сайта  =====
 +httpstat – это простой и удобный скрипт [[Python|Python]] для Linux, которая используется для измерения и анализа производительности веб-сервисов. Она выводит время, затраченное на каждый этап общения с сервером, начиная от установления соединения и заканчивая передачей данных. Это делает httpstat мощным инструментом для тестирования и анализа скорости загрузки веб-страниц.
 +
 +Установка
 +<file bash>
 +wget -c https://raw.githubusercontent.com/reorx/httpstat/master/httpstat.py
 +</file>
 +Простой запрос к веб-сервису:
 +<file bash>
 +~$ httpstat https://dieg.info
 +Connected to xxx:xxx:xxx:xxx::x:443 from xxx:xxx:xxx:xxx::x:60714
 +
 +HTTP/2 200
 +server: nginx/1.18.0 (Ubuntu)
 +date: Sun, 21 Jan 2024 09:18:56 GMT
 +...
 +
 +Body stored in: /tmp/tmpsb85ajck
 +
 +  DNS Lookup   TCP Connection   TLS Handshake   Server Processing   Content Transfer
 +[     3ms    |       8ms      |     148ms           316ms             168ms      ]
 +                            |                                                  |
 +    namelookup:3ms            |                                                  |
 +                        connect:11ms          |                                    |
 +                                    pretransfer:159ms                              |
 +                                                      starttransfer:475ms            |
 +                                                                                 total:643ms
 +
 +</file>
 +Использование метода POST для отправки данных:
 +<file bash>
 +httpstat -X POST -d "param1=value1&param2=value2" http://example.com/post
 +</file>
 +Запрос с заголовками:
 +<file bash>
 +httpstat -H "Content-Type: application/json" -H "Authorization: Bearer YourToken" http://example.com/
 +</file>
 +Из вывода команды справки  httpstat -h вы можете увидеть, что httpstat имеет набор полезных переменных окружения, которые влияют на его поведение. Чтобы использовать их, просто экспортируйте переменные с соответствующим значением в файле .bashrc или .zshrc. Например:
 +<file bash>
 +export HTTPSTAT_SHOW_IP=false
 +export HTTPSTAT_SHOW_SPEED=true
 +export HTTPSTAT_SAVE_BODY=false
 +export HTTPSTAT_DEBUG=true
 +</file>
 +После того, как вы закончите добавлять их, сохраните файл и выполните приведенную ниже команду для внесения изменений:
 +<file bash>
 +$ source ~ /.bashrc
 +</file>
 +httpstat выделяется своим понятным интерфейсом и детализацией временных метрик. В то же время, утилиты, такие как Apache Bench и Httperf, предлагают более широкие возможности для проведения нагрузочного тестирования, но могут быть более сложными в настройке и использовании.
 +===== Список утилит для нагрузочного тестирования сайта =====
 +  * Бенчмарк [[siege]] - утилита для регрессивного тестирования и анализа производительности HTTP
 +  * Бенчмарк [[http://tsung.erlang-projects.org/|Tsung]] It can be used to stress HTTP, WebDAV, SOAP, PostgreSQL, MySQL, LDAP and Jabber/XMPP servers. 
 +  * Apache [[JMeter]] — инструмент для проведения нагрузочного тестирования
 +  * [[Locust]] - инструмент тестирования пользовательской нагрузки. Позволяет писать сценарии на [[Python]].
 +===== Заключение =====
 +Apache Bench, Httperf и Tsung отлично подходят для тестирования нагрузки на большие и маленькие сайты.
 +
 +Список инструментов для проверки производительности веб-сервера и тестирования нагрузки на сайт не ограничивается приведенным в этом материале. Подобных утилит достаточно много, как платных, так и бесплатных, например [[jmeter|Apache JMeter]] — мощная, продвинутая и достаточно сложная.
  

📌 Удобный подбор VPS по параметрам доступен на DIEGfinder.com - официальном инструменте проекта DIEG. Это часть единой экосистемы, созданной для того, чтобы помочь быстро найти подходящий VPS/VDS сервер для любых задач хостинга.

📌 Для тестирования скриптов, установщиков VPN и Python-ботов рекомендуем использовать надежные VPS на короткий срок. Подробнее о быстрой аренде VPS для экспериментов - читайте здесь.

💥 Подпишись в Телеграм 💥 и задай вопрос по сайтам и хостингам бесплатно!