В предыдущей статье Что должен знать каждый бэкенд OpenResty Начало работы и практика обеспечения безопасности шлюзов , я представил тебе OpenResty Вводное употребление – это WAF Практика защиты, эта статья продолжит знакомить вас с ней. OpenResty Начало работы с тестированием производительности статьи.
Тестирование производительности является неотъемлемой частью разработки программного обеспечения. Оно может помочь нам оценить производительность, стабильность, масштабируемость и другие показатели системы, а также обеспечить основу для оптимизации и улучшения. Однако тестирование производительности также, скорее всего, будет неточным, поскольку на него влияют многие факторы, такие как сетевое окружение, конфигурация сервера, инструменты стресс-тестирования, сценарии стресс-тестирования и т. д. Если мы выберем неподходящие инструменты стресс-тестирования или не сможем разработать сценарии стресс-тестирования, результаты, которые мы получим, могут быть далеки от реальной ситуации или даже привести к неверным суждениям и решениям.
Как говорится, если хочешь хорошо выполнять свою работу, сначала нужно заточить инструменты. Так как же выбрать подходящий инструмент для измерения давления? первый OpenResty
да fork с Nginx разработан на основе Nginx Оригинальная мощная производительность (сопрограмма + IO Мультиплексирование Epoll), его производительность будет неплохой. Поэтому нам нужен кузов, который будет достаточно мощным, чтобы максимизировать производительность автомобиля. досуха OpenResty
Производительность программы, сервер cpu Инструменты стресс-тестирования ресурсов.
Здесь я хотел бы представить вам «Хаммер» в мире опрессовочных инструментов. —— wrk。wrk да Один за HTTP Инструмент для тестирования протоколов, который может работать на одной машине с несколькими ядрами. CPU Из условий используйте систему с извысокой ремнем производительность I/O такие механизмы, как epoll,kqueue и т. д., посредством многопоточности и режима событий, создавая большую нагрузку на целевую машину. работать поддерживать Lua-скрипт для создания сложных тестовых сценариев (это похоже на OpenResty
поддерживать То же, что и Lua-скрипт), который также может выводить подробную статистику времени отклика. работать Преимущества заключаются в следующем:
wrk Устанавливается только на классы. Unix система, поэтому нам нужен Linux или MacOS среда。установка виндовс 10 Нужно пристегнуть ремень безопасности Ubuntu подсистема.
В системах Ubuntu/Debian wrk можно установить с помощью следующей команды:
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 можно установить с помощью следующей команды:
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
Mac Систему также можно скомпилировать, предварительно скомпилировав, но более рекомендуется использовать да. brew установить, Шаги следующие:
brew install wrk
;Windown 10 нужно быть внутри Windows Функция Проверьте здесь Применимо к Linux из Windows подсистема, тогда пройди bash команда переключается на Ubuntu подсистема Далее см. установка Linux из Этапы эксплуатации,Установить wrk。
Прежде чем начать стресс-тестирование, нам все равно необходимо внести некоторые изменения в тестовую среду и воспользоваться инструментом стресс-тестирования. wrk Выжать досуха OpenResty
Программа изпроизводительность。
Linux По умолчанию система устанавливает ограничение на количество файлов, которые может открыть каждый процесс, обычно да. 1024 индивидуальный. Этот предел повлияет на количество соединений, которые сервер может обрабатывать одновременно, поэтому этот предел необходимо увеличить. Добавлено из метода модификации /etc/security/limits.conf
файл, добавьте следующее содержимое:
* soft nofile 65535
* hard nofile 65535
в *
Число указывает на изменение всех пользовательских ограничений, программных или hard Укажите, следует ли изменить мягкое или жесткое ограничение, 65536. Затем вы указываете, что хотите изменить новое предельное значение, то есть Максимальное. количество открытых файлы (обратите внимание, что значение мягкого ограничения должно быть меньше или равно жесткому пределу). Сохраните файл после внесения изменений.
Таким образом, все пользователи могут быть однопроцессными. Максимальное количество открытых лимит файлов установлен на 65535 индивидуальный. если этого недостаточно, вы можете продолжать увеличивать это значение, но будьте осторожны, чтобы не превысить системный уровень. Максимальное количество открытых лимит файлов, можно пройти cat /proc/sys/fs/file-max
команда для просмотра этого предела.
Проверять Linux Уровень системы из Максимальное количество открытых лимит файлов, используйте следующую команду:
[root@VM-16-5-centos ~]# cat /proc/sys/fs/file-nr
2112 0 369508
Последняя цифра здесь да Максимальное количество открытых файлы. Если ваше число в вашей машине относительно невелико, поэтому его необходимо изменить. /etc/sysctl.conf
Чтобы увеличить размер файла:
fs.file-max = 1020000
net.ipv4.ip_conntrack_max = 1020000
net.ipv4.netfilter.ip_conntrack_max = 1020000
После завершения модификации необходимо перезапустить системную службу, чтобы изменения вступили в силу:
sysctl -p /etc/sysctl.conf
Внесите некоторые изменения в файл конфигурации Nginx следующим образом:
# Настройте количество рабочих процессов
worker_processes 1;
...
events {
# Количество соединений, обрабатываемых одним рабочим процессом
worker_connections 1024;
}
По умолчанию В Nginx есть мастер и рабочий Два процесса, мастер процесса управления рабочий Процесс, рабочий Этот процесс используется для обработки внешних запросов и предоставления услуг внешнему миру.
worker_processes 1
из Описание конфигурации По умолчанию количество рабочих процессов равно 1. На многоядерной машине мы можем установить ее как сервер CPU из Количество ядер для улучшения Nginx из Количество процессов подключения.
worker_connections 1024
из Описание конфигурации: количество соединений, которые может обработать один процесс. 1024. В сценариях высокого давления мы можем увеличить это значение и изменить его на 10240。
наконец,оптимизацияиз Nginx Конфигурационный файл выглядит следующим образом:
# Автоматически устанавливать количество рабочих процессов в зависимости от количества ядер ЦП.
worker_processes auto;
...
events {
# Количество соединений, обрабатываемых одним рабочим процессом
worker_connections 10240;
}
работа по базовому использованию:
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 Чтобы выполнить стресс-тестирование интерфейса, мы можем использовать следующую команду:
wrk -c 100 -d 30s -t 4 --latency http://121.4.xxx.xx/hello
Эта команда указывает, что wrk используется для запуска стресс-теста со 100 соединениями и 4 потоками продолжительностью 10 секунд и вывода статистики времени ответа.
После запуска мы видим следующий результат:
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
Из вывода мы можем увидеть следующую информацию:
Running 30s test @ http://121.4.xxx.xx/hello
4 threads and 100 connections
Latency 60.74ms 94.62ms 1.82s 88.81%
Эти данные и QPS Так же важно,Указывает скорость реакции системы,Чем меньше это значение, тем лучше.
Latency Distribution
50% 26.22ms
75% 32.99ms
90% 176.28ms
99% 475.41ms
Requests/sec: 2829.91
Эти данные показывают, сколько запросов сервер обрабатывает в секунду. Чем больше значение, тем лучше.
Из этой информации мы можем видеть OpenResty
Программа изпроизводительностьвозвращатьсядаочень хорошоиз,Время отклика составляет порядка нескольких миллисекунд.,QPS Тоже очень высокий.
Учитывая, что я из OpenResty Конфигурация сервера имеет только 2 ядра, память 4 ГБ, пропускная способность 5 МБ, результаты теста следует рассматривать рационально, и каждый может проверить это самостоятельно.
wrk поддерживатьиспользовать Lua-скрипт для настройки сценариев стресс-тестирования, например определения HTTP метод, динамически генерировать параметры запроса и изменять заголовки запросов. Таким образом, мы можем моделировать различные сложные и реальные действия пользователей и бизнес-логику, приближая результаты стресс-тестирования к реальной ситуации. работать из исходного кода приведены некоторые примеры скриптов, вы можете обратиться к https://github.com/wg/wrk/tree/master/scripts。
Чтобы использовать Lua-скрипт, необходим быть внутриуказан в командной строке -s
Параметры и укажите путь к файлу скрипта. Например, мы можем использовать post.lua
скрипт для отправки POST просить:
wrk -c 100 -d 10s -t 4 -s post.lua http://121.4.xxx.xx/hello
в,post.lua
содержание следующее:
wrk.method = "POST"
wrk.body = "name=tom"
wrk.headers["Content-Type"] = "application/x-www-form-urlencoded"
Таким образом, мы можем имитировать отправку POST Запрос на перенос данных формыизсцена。
Параметр wrk из повлияет на результаты стресс-теста,Поэтому нам необходимо выбрать соответствующие параметры в соответствии с реальной ситуацией. Вообще говоря,Мы можем сослаться на следующие шаги:
wrk Во время стресс-теста могут возникнуть некоторые ошибки.,Например, тайм-аут соединения、В соединении отказано、Ожидание сброса соединения. Эти ошибки могут быть связаны с недостаточной производительностью целевого сервера.、Сетевое окружение нестабильно、Вызвано ограничениями брандмауэра и другими причинами. Чтобы устранить ошибку, мы можем попробовать следующие методы:
wrk в праве OpenResty
Программа во время испытания под давлением,Не подвел и показал сильную проверку давлениемпроизводительность。Я надеюсь, что благодаря этой статье каждый сможет понять суть wrk Более полное понимание инструментов тестирования производительности.
сосредоточиться на паблик-аккаунте [waynblog] каждую неделю делится технической информацией, открытыми проектами, практическим опытом, переводами качественных зарубежных статей и т. д., вы изсосредоточитесь мы обновим мощность!