Инструменты для проведения нагрузочного тестирования скриптов PHP, веб -серверов Apache, Nginx, LiteSpeed Web Server.
Нагрузочное тестирование сайта — это процесс проверки производительности и надёжности веб-сайта или приложения путём создания условий, максимально приближенных к реальным, и проверки его поведения при большой нагрузке.
Пока ваш сайт ещё достаточно молод, но нацелен на широкую аудиторию, то весьма сложно понять насколько мощное серверное оборудование требуется. Так что лучшим решением при выборе хостинга будет симуляция потока пользователей при помощи синтетических тестов.
Так же бывает необходимо нагрузить сайт для выявления ошибок, которые появляются только при нагрузке на сервер.
Подробно о бенчмарк утилите Apache Bench (ab) для анализа производительности HTTP серверов, например Apache, Nginx читайте в статье ab (Apache Bench) - утилита проверки производительности Apache, Nginx, LSWS.
Утилита httperf, как и ab, проста в использовании, обладает достаточно широким функционалом и запускается также из ксомадной строки Linux.
Создание 100 000 сессий (по 5 вызовов через каждые 2 с) со скоростью 1000:
httperf --hog --server somesite.com --wsess=100000,5,2 --rate 1000 --timeout 5
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)
В отчете утилиты стоит сфокусироваться на:
Tsung мощная, продвинутая, мультизадачная и мультипоточная утилита. Tsung написан на Erlang Инструмент может использоваться для нагрузки серверов HTTP, WebDAV, SOAP, PostgreSQL, MySQL, LDAP и Jabber/XMPP. Поддерживается SSL, мониторинг ресурсов системы и агенты SNMP, Munin или Erlang на удаленных серверах, симуляция поведения юзеров и расширенные отчеты.
В Ubuntu 20.04.3 LTS утилита Tsung присутствует в репозитории, ищем командой apt
# apt search ^tsung Sorting... Done Full Text Search... Done tsung/focal 1.7.0-3.1 amd64 distributed multi-protocol load testing tool
Установка tsung
apt install tsung
Программе tsung нужно передать файл с описанием сценария теста. Вот пример простого тестового сценария:
<?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=&myid=&devid=0&v=3.24&uuid=48wTOvoa-uEtC0thHzBkIKir14sXgkOy&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>
В нём указано что к localhost к порту 8087 надо подключатся по вебсокетам. И создавать по 2500 тысячи подключений каждую секунду до тех пор, пока их в сумме не наберётся 64000.
То есть этот сценарий просто создаёт тестовую нагрузку в 64000 пользователей онлайн. Тест синтетический и реальные 64000 будут нагружать сервер несколько по другому, а не просто висеть онлайн, но это уже от приложения и предполагаемого сценария использования комет сервера можно составить свой сценарий тестирования, который бы отражал ваш тип нагрузки на комет сервер.
Нагрузка в 64000 это максимум который позволит создать операционная система. Если хотите больше, то надо тестировать один сервер с нескольких машин с tsung одновременно. TCP-соединение уникально определяется четверкой [source ip, source port, dest ip, dest port], таким образом с одной машины на 1 порт сервера можно создать не более 64 тыс одновременных соединений
Отчет будет состоять из графиков и важной дополнительной информации. В нем стоит обратить внимание на:
httpstat – это простой и удобный скрипт Python для Linux, которая используется для измерения и анализа производительности веб-сервисов. Она выводит время, затраченное на каждый этап общения с сервером, начиная от установления соединения и заканчивая передачей данных. Это делает httpstat мощным инструментом для тестирования и анализа скорости загрузки веб-страниц.
Установка
wget -c https://raw.githubusercontent.com/reorx/httpstat/master/httpstat.py
Простой запрос к веб-сервису:
~$ 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
Использование метода POST для отправки данных:
httpstat -X POST -d "param1=value1¶m2=value2" http://example.com/post
Запрос с заголовками:
httpstat -H "Content-Type: application/json" -H "Authorization: Bearer YourToken" http://example.com/
Из вывода команды справки httpstat -h вы можете увидеть, что httpstat имеет набор полезных переменных окружения, которые влияют на его поведение. Чтобы использовать их, просто экспортируйте переменные с соответствующим значением в файле .bashrc или .zshrc. Например:
export HTTPSTAT_SHOW_IP=false export HTTPSTAT_SHOW_SPEED=true export HTTPSTAT_SAVE_BODY=false export HTTPSTAT_DEBUG=true
После того, как вы закончите добавлять их, сохраните файл и выполните приведенную ниже команду для внесения изменений:
$ source ~ /.bashrc
httpstat выделяется своим понятным интерфейсом и детализацией временных метрик. В то же время, утилиты, такие как Apache Bench и Httperf, предлагают более широкие возможности для проведения нагрузочного тестирования, но могут быть более сложными в настройке и использовании.
Apache Bench, Httperf и Tsung отлично подходят для тестирования нагрузки на большие и маленькие сайты.
Список инструментов для проверки производительности веб-сервера и тестирования нагрузки на сайт не ограничивается приведенным в этом материале. Подобных утилит достаточно много, как платных, так и бесплатных, например Apache JMeter — мощная, продвинутая и достаточно сложная.