Начало работы с OpenResty: Стресс-тестирование: «Хаммер» в мире инструментов стресс-тестирования находится на рассмотрении
Начало работы с OpenResty: Стресс-тестирование: «Хаммер» в мире инструментов стресс-тестирования находится на рассмотрении

В предыдущей статье Что должен знать каждый бэкенд OpenResty Начало работы и практика обеспечения безопасности шлюзов , я представил тебе OpenResty Вводное употребление – это WAF Практика защиты, эта статья продолжит знакомить вас с ней. OpenResty Начало работы с тестированием производительности статьи.

Тестирование производительности является неотъемлемой частью разработки программного обеспечения. Оно может помочь нам оценить производительность, стабильность, масштабируемость и другие показатели системы, а также обеспечить основу для оптимизации и улучшения. Однако тестирование производительности также, скорее всего, будет неточным, поскольку на него влияют многие факторы, такие как сетевое окружение, конфигурация сервера, инструменты стресс-тестирования, сценарии стресс-тестирования и т. д. Если мы выберем неподходящие инструменты стресс-тестирования или не сможем разработать сценарии стресс-тестирования, результаты, которые мы получим, могут быть далеки от реальной ситуации или даже привести к неверным суждениям и решениям.

Как говорится, если хочешь хорошо выполнять свою работу, сначала нужно заточить инструменты. Так как же выбрать подходящий инструмент для измерения давления? первый OpenResty да fork с Nginx разработан на основе Nginx Оригинальная мощная производительность (сопрограмма + IO Мультиплексирование Epoll), его производительность будет неплохой. Поэтому нам нужен кузов, который будет достаточно мощным, чтобы максимизировать производительность автомобиля. досуха OpenResty Производительность программы, сервер cpu Инструменты стресс-тестирования ресурсов.

Здесь я хотел бы представить вам «Хаммер» в мире опрессовочных инструментов. —— wrk。wrk да Один за HTTP Инструмент для тестирования протоколов, который может работать на одной машине с несколькими ядрами. CPU Из условий используйте систему с извысокой ремнем производительность I/O такие механизмы, как epoll,kqueue и т. д., посредством многопоточности и режима событий, создавая большую нагрузку на целевую машину. работать поддерживать Lua-скрипт для создания сложных тестовых сценариев (это похоже на OpenResty поддерживать То же, что и Lua-скрипт), который также может выводить подробную статистику времени отклика. работать Преимущества заключаются в следующем:

  • высокая производительность:wrk Может использовать преимущества нескольких ядер CPU Возможности параллельных вычислений, использование нескольких потоков и соединений для одновременной отправки запросов и высокая эффективность I/O модель для обработки ответа. Таким образом, работайте На одной машине можно создать до сотен тысяч или даже миллионов уровней. QPS (количество запросов в секунду), намного превосходящее другие распространенные инструменты тестирования под давлением, такие как ab、siege、jmeter ждать.
  • гибкий:wrk поддерживатьиспользовать Lua-скрипт для настройки сценариев стресс-тестирования, например определения HTTP метод、Динамически генерировать параметры запроса、Изменить заголовок запросаждать.так,Мы можем моделировать различные сложные и реальные действия пользователей и бизнес-логику.,Это приближает результаты стресс-тестов к реальной ситуации.
  • краткий:wrk Установка очень проста в использовании и требует всего лишь нескольких команд для выполнения. работать из Результат также очень ясени Интуитивный,Может отображать каждый поток и общее время ответа и количество запросов в секунду.,И вы можете распечатать распределение времени отклика,Нам удобно анализировать узкие места производительности системы.

wrk установка

wrk Устанавливается только на классы. Unix система, поэтому нам нужен Linux или MacOS среда。установка виндовс 10 Нужно пристегнуть ремень безопасности Ubuntu подсистема.

установка Linux

В системах Ubuntu/Debian wrk можно установить с помощью следующей команды:

Язык кода:javascript
копировать
sudo apt-get install build-essential libssl-dev git -y
git clone https://github.com/wg/wrk.git wrk
cd wrk
make
# Переместите исполняемый файл в /usr/local/bin Расположение
sudo cp wrk /usr/local/bin

Для систем CentOS/RedHat/Fedora wrk можно установить с помощью следующей команды:

Язык кода:javascript
копировать
sudo yum groupinstall 'Development Tools'
sudo yum install -y openssl-devel git
git clone https://github.com/wg/wrk.git wrk
cd wrk
make
# Переместите исполняемый файл в /usr/local/bin Расположение
sudo cp wrk /usr/local/bin

Установка MacOS

Mac Систему также можно скомпилировать, предварительно скомпилировав, но более рекомендуется использовать да. brew установить, Шаги следующие:

  • Установить Homebrew, Официальный сайт ссылки на метод установки https://brew.sh (Это всего лишь одна линия командования и всё);
  • Установить wrk: brew install wrk;

установка виндовс 10

Windown 10 нужно быть внутри Windows Функция Проверьте здесь Применимо к Linux из Windows подсистема, тогда пройди bash команда переключается на Ubuntu подсистема Далее см. установка Linux из Этапы эксплуатации,Установить wrk。

Подготовка перед испытанием под давлением

Прежде чем начать стресс-тестирование, нам все равно необходимо внести некоторые изменения в тестовую среду и воспользоваться инструментом стресс-тестирования. wrk Выжать досуха OpenResty Программа изпроизводительность。

Максимальное количество файлов на процесс

Linux По умолчанию система устанавливает ограничение на количество файлов, которые может открыть каждый процесс, обычно да. 1024 индивидуальный. Этот предел повлияет на количество соединений, которые сервер может обрабатывать одновременно, поэтому этот предел необходимо увеличить. Добавлено из метода модификации /etc/security/limits.conf файл, добавьте следующее содержимое:

Язык кода:javascript
копировать
* soft nofile 65535
* hard nofile 65535

в * Число указывает на изменение всех пользовательских ограничений, программных или hard Укажите, следует ли изменить мягкое или жесткое ограничение, 65536. Затем вы указываете, что хотите изменить новое предельное значение, то есть Максимальное. количество открытых файлы (обратите внимание, что значение мягкого ограничения должно быть меньше или равно жесткому пределу). Сохраните файл после внесения изменений.

Таким образом, все пользователи могут быть однопроцессными. Максимальное количество открытых лимит файлов установлен на 65535 индивидуальный. если этого недостаточно, вы можете продолжать увеличивать это значение, но будьте осторожны, чтобы не превысить системный уровень. Максимальное количество открытых лимит файлов, можно пройти cat /proc/sys/fs/file-max команда для просмотра этого предела.

Максимальное количество открытых файлов

Проверять Linux Уровень системы из Максимальное количество открытых лимит файлов, используйте следующую команду:

Язык кода:javascript
копировать
[root@VM-16-5-centos ~]# cat /proc/sys/fs/file-nr
2112 0 369508

Последняя цифра здесь да Максимальное количество открытых файлы. Если ваше число в вашей машине относительно невелико, поэтому его необходимо изменить. /etc/sysctl.conf Чтобы увеличить размер файла:

Язык кода:javascript
копировать
fs.file-max = 1020000
net.ipv4.ip_conntrack_max = 1020000
net.ipv4.netfilter.ip_conntrack_max = 1020000

После завершения модификации необходимо перезапустить системную службу, чтобы изменения вступили в силу:

Язык кода:javascript
копировать
sysctl -p /etc/sysctl.conf

Количество рабочих процессов Nginx и количество подключений

Внесите некоторые изменения в файл конфигурации Nginx следующим образом:

Язык кода:javascript
копировать
# Настройте количество рабочих процессов
worker_processes  1;

...

events {
    # Количество соединений, обрабатываемых одним рабочим процессом
    worker_connections  1024;
}

По умолчанию В Nginx есть мастер и рабочий Два процесса, мастер процесса управления рабочий Процесс, рабочий Этот процесс используется для обработки внешних запросов и предоставления услуг внешнему миру.

worker_processes 1 из Описание конфигурации По умолчанию количество рабочих процессов равно 1. На многоядерной машине мы можем установить ее как сервер CPU из Количество ядер для улучшения Nginx из Количество процессов подключения.

worker_connections 1024 из Описание конфигурации: количество соединений, которые может обработать один процесс. 1024. В сценариях высокого давления мы можем увеличить это значение и изменить его на 10240。

наконец,оптимизацияиз Nginx Конфигурационный файл выглядит следующим образом:

Язык кода:javascript
копировать
# Автоматически устанавливать количество рабочих процессов в зависимости от количества ядер ЦП.
worker_processes  auto;

...

events {
    # Количество соединений, обрабатываемых одним рабочим процессом
    worker_connections  10240;
}

wrk Использование

работа по базовому использованию:

Язык кода:javascript
копировать
wrk <options> <url>

в,<options> данекоторые дополнительныеизпараметр,Используется для управления конфигурацией измерения давления.,<url> да Провести стресс-тестирование целевого URL.

Часто используемые параметры

wrk поддерживатьниже Часто используемые параметры:

  • -c, --connections <N>:Укажите, чтобы оставить открытымиз Количество соединений;
  • -d, --duration <T>:Указанное испытание давлениемизпродолжительность;
  • -t, --threads <N>:обозначение Чтобы использовать Количество потоков;
  • -s, --script <S>:обозначениезагрузитьиз Файл сценария Lua;
  • -H, --header <H>:обозначениедобавить к запросуиз HTTP голова;
  • --latency:обозначение Чтобы распечататьвремя ответа Статистика;
  • --timeout <T>:обозначениерозетка/Запросить тайм-аут;

в,числопараметр可以использовать SI Единица (1 тыс., 1M, 1G), параметр времени может использовать единицу времени (2 с, 2m, 2h)。

Пример стресс-теста

Теперь нам предстоит OpenResty Программа из hello Чтобы выполнить стресс-тестирование интерфейса, мы можем использовать следующую команду:

Язык кода:javascript
копировать
wrk -c 100 -d 30s -t 4 --latency http://121.4.xxx.xx/hello

Эта команда указывает, что wrk используется для запуска стресс-теста со 100 соединениями и 4 потоками продолжительностью 10 секунд и вывода статистики времени ответа.

После запуска мы видим следующий результат:

Язык кода:javascript
копировать
Running 30s test @ http://121.4.xxx.xx/hello
  4 threads and 100 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    60.74ms   94.62ms   1.82s    88.81%
    Req/Sec   710.91    118.29     1.02k    69.08%
  Latency Distribution
     50%   26.22ms
     75%   32.99ms
     90%  176.28ms
     99%  475.41ms
  84967 requests in 30.02s, 15.40MB read
  Socket errors: connect 0, read 0, write 0, timeout 2
Requests/sec:   2829.91
Transfer/sec:    525.08KB

Из вывода мы можем увидеть следующую информацию:

  • Стресс-тест конфигурации и целевого URL,
Язык кода:javascript
копировать
Running 30s test @ http://121.4.xxx.xx/hello
  4 threads and 100 connections
  • в среднем за поток из、стандартное отклонение、Максимум и плюс-минус один стандартное отклонение Аккаунта из Время ответа (задержка),
Язык кода:javascript
копировать
  Latency    60.74ms   94.62ms   1.82s    88.81%

Эти данные и QPS Так же важно,Указывает скорость реакции системы,Чем меньше это значение, тем лучше.

  • Распределение времени ответа: то есть какая доля запросов выполняется в течение определенного периода времени.,Подробная распечатка процентного распределения задержки также показана ниже.,
Язык кода:javascript
копировать
  Latency Distribution
     50%   26.22ms
     75%   32.99ms
     90%  176.28ms
     99%  475.41ms
  • Общее количество запросов,
Язык кода:javascript
копировать
Requests/sec:   2829.91

Эти данные показывают, сколько запросов сервер обрабатывает в секунду. Чем больше значение, тем лучше.

Из этой информации мы можем видеть OpenResty Программа изпроизводительностьвозвращатьсядаочень хорошоиз,Время отклика составляет порядка нескольких миллисекунд.,QPS Тоже очень высокий.

Учитывая, что я из OpenResty Конфигурация сервера имеет только 2 ядра, память 4 ГБ, пропускная способность 5 МБ, результаты теста следует рассматривать рационально, и каждый может проверить это самостоятельно.

Lua-скрипт

wrk поддерживатьиспользовать Lua-скрипт для настройки сценариев стресс-тестирования, например определения HTTP метод, динамически генерировать параметры запроса и изменять заголовки запросов. Таким образом, мы можем моделировать различные сложные и реальные действия пользователей и бизнес-логику, приближая результаты стресс-тестирования к реальной ситуации. работать из исходного кода приведены некоторые примеры скриптов, вы можете обратиться к https://github.com/wg/wrk/tree/master/scripts。

Чтобы использовать Lua-скрипт, необходим быть внутриуказан в командной строке -s Параметры и укажите путь к файлу скрипта. Например, мы можем использовать post.lua скрипт для отправки POST просить:

Язык кода:javascript
копировать
wrk -c 100 -d 10s -t 4 -s post.lua http://121.4.xxx.xx/hello

в,post.lua содержание следующее:

Язык кода:javascript
копировать
wrk.method = "POST"
wrk.body   = "name=tom"
wrk.headers["Content-Type"] = "application/x-www-form-urlencoded"

Таким образом, мы можем имитировать отправку POST Запрос на перенос данных формыизсцена。

некоторые часто задаваемые вопросы

Как выбрать подходящие параметры?

Параметр wrk из повлияет на результаты стресс-теста,Поэтому нам необходимо выбрать соответствующие параметры в соответствии с реальной ситуацией. Вообще говоря,Мы можем сослаться на следующие шаги:

  • Сначала один поток, чтобы постоянно измерять количество соединений, пока QPS (количество запросов в секунду) остается стабильным, а время ответа превышает ограничения бизнес-требований. Получить оптимальное количество однопоточных соединений при текущем значении.
  • Количество одиночных потоков подключения остается неизменным, а количество потоков постоянно увеличивается (рекомендуется достичь количества ядер ЦП) до тех пор, пока не появится общий уровень QPS.
  • если QPS По мере увеличения количества потоков производительность целевого сервера достигает узкого места. Один поток может провести стресс-тестирование оптимальной целевой машины. QPS ценить.
  • если QPS По мере увеличения количества потоков, да wrk Производительность этой машины достигла узкого места и ее необходимо повысить. wrk Обновление номера машины или замены высокое производительностьиз wrk машина.

Как решить ошибки, возникающие во время стресс-тестирования?

wrk Во время стресс-теста могут возникнуть некоторые ошибки.,Например, тайм-аут соединения、В соединении отказано、Ожидание сброса соединения. Эти ошибки могут быть связаны с недостаточной производительностью целевого сервера.、Сетевое окружение нестабильно、Вызвано ограничениями брандмауэра и другими причинами. Чтобы устранить ошибку, мы можем попробовать следующие методы:

  • Корректирование работы параметров, таких как уменьшение количества подключений、Увеличить таймаут и т.д.;
  • Проверьте использование ресурсов целевого сервера,Такие как процессор, память, диск, сеть и т. д.,Оптимизировать конфигурацию сервера и расширить сервер;
  • Проверьте сетевое окружение,Например, пропускная способность, задержка, потеря пакетов и т. д.,Оптимизировать сетевое оборудование и заменить сетевые линии;
  • Проверьте настройки брандмауэра, такие как открытие портов, ограничения трафика и т. д., и отпустите wrk из Прав доступа или Отключите брандмауэр;

Подвести итог

wrk в праве OpenResty Программа во время испытания под давлением,Не подвел и показал сильную проверку давлениемпроизводительность。Я надеюсь, что благодаря этой статье каждый сможет понять суть wrk Более полное понимание инструментов тестирования производительности.

сосредоточиться на паблик-аккаунте [waynblog] каждую неделю делится технической информацией, открытыми проектами, практическим опытом, переводами качественных зарубежных статей и т. д., вы изсосредоточитесь мы обновим мощность!

boy illustration
Учебное пособие по Jetpack Compose для начинающих, базовые элементы управления и макет
boy illustration
Код js веб-страницы, фон частицы, код спецэффектов
boy illustration
【новый! Суперподробное】Полное руководство по свойствам компонентов Figma.
boy illustration
🎉Обязательно к прочтению новичкам: полное руководство по написанию мини-программ WeChat с использованием программного обеспечения Cursor.
boy illustration
[Забавный проект Docker] VoceChat — еще одно приложение для мгновенного чата (IM)! Может быть встроен в любую веб-страницу!
boy illustration
Как реализовать переход по странице в HTML (html переходит на указанную страницу)
boy illustration
Как решить проблему зависания и низкой скорости при установке зависимостей с помощью npm. Существуют ли доступные источники npm, которые могут решить эту проблему?
boy illustration
Серия From Zero to Fun: Uni-App WeChat Payment Practice WeChat авторизует вход в систему и украшает страницу заказа, создает интерфейс заказа и инициирует запрос заказа
boy illustration
Серия uni-app: uni.navigateЧтобы передать скачок значения
boy illustration
Апплет WeChat настраивает верхнюю панель навигации и адаптируется к различным моделям.
boy illustration
JS-время конвертации
boy illustration
Обеспечьте бесперебойную работу ChromeDriver 125: советы по решению проблемы chromedriver.exe не найдены
boy illustration
Поле комментария, щелчок мышью, специальные эффекты, js-код
boy illustration
Объект массива перемещения объекта JS
boy illustration
Как открыть разрешение на позиционирование апплета WeChat_Как использовать WeChat для определения местонахождения друзей
boy illustration
Я даю вам два набора из 18 простых в использовании фонов холста Power BI, так что вам больше не придется возиться с цветами!
boy illustration
Получить текущее время в js_Как динамически отображать дату и время в js
boy illustration
Вам необходимо изучить сочетания клавиш vsCode для форматирования и организации кода, чтобы вам больше не приходилось настраивать формат вручную.
boy illustration
У ChatGPT большое обновление. Всего за 45 минут пресс-конференция показывает, что OpenAI сделал еще один шаг вперед.
boy illustration
Copilot облачной разработки — упрощение разработки
boy illustration
Микросборка xChatGPT с низким кодом, создание апплета чат-бота с искусственным интеллектом за пять шагов
boy illustration
CUDA Out of Memory: идеальное решение проблемы нехватки памяти CUDA
boy illustration
Анализ кластеризации отдельных ячеек, который должен освоить каждый&MarkerгенетическийВизуализация
boy illustration
vLLM: мощный инструмент для ускорения вывода ИИ
boy illustration
CodeGeeX: мощный инструмент генерации кода искусственного интеллекта, который можно использовать бесплатно в дополнение к второму пилоту.
boy illustration
Машинное обучение Реальный бой LightGBM + настройка параметров случайного поиска: точность 96,67%
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция без кодирования и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
LM Studio для создания локальных больших моделей
boy illustration
Как определить количество слоев и нейронов скрытых слоев нейронной сети?
boy illustration
[Отслеживание целей] Подробное объяснение ByteTrack и детали кода