Моя недавняя работа была связана с оптимизацией производительности на стороне сервера.Строгие требования к QPS (коэффициент запросов в секунду) заставили меня, который раньше писал блоги с помощью node.js, глубоко чувствовать, что то, что я делал раньше, было игрушкой. Поэтому недавно я пытался получить некоторые знания о тестировании под давлением. Для инструментов измерения давления в отрасли обычно используются jmeter, loadrunner, tcpcopy, apache Bench, wrk(2) и т. д. Как новичок в стресс-тестировании, в сочетании с реальной ситуацией проекта (мониторинг оборудования не требуется, а запрос на тестирование относительно прост), я решил начать здесь.wrk2. В этой статье зафиксированы некоторые впечатления и переживания в процессе использования.
Введение в работу
wrk2 основан наwrkРазвиваясь, мы можем сначала понять использование wrk. Wrk похож по типу на apache Bench (сокращенно ab ниже), и это инструмент на терминале, который использует многопоточный дизайн для генерации запросов. По сравнению с ab, наиболее похвальной особенностью wrk должна быть его функция пользовательского сценария: wrk поддерживает использование сценариев lua для генерации HTTP-запросов, обработки ответов и настраиваемых отчетов о стресс-тестах. wrk также очень прост в основных элементах конфигурации:
$ wrk
wrk 4.1.0 [kqueue] Copyright (C) 2012 Will Glozer
Usage: wrk <options> <url>
Options:
# HTTP 连接数
-c, --connections <N> Connections to keep open
# 测试持续时间,如 2s 2m 2h
-d, --duration <T> Duration of test
# 开启的线程数
-t, --threads <N> Number of threads to use
# 进阶功能,使用 lua 脚本
-s, --script <S> Load Lua script file
# 添加请求头,如 "User-Agent: wrk"
-H, --header <H> Add header to request
# 打印详细延迟统计
--latency Print latency statistics
# 设置请求超时时间,大于该时间的请求将被记录
--timeout <T> Socket/request timeout
URLhttp://127.0.0.1:8080/index.html
Испытание давлением открытия 12 потоков, открытие 400 HTTP-соединений и продолжительностью 30 секунд можно выразить следующим образом:
wrk -t12 -c400 -d30s http://127.0.0.1:8080/index.html
Содержание отчета, созданного после стресс-теста, также относительно подробное, и некоторые участники стресс-теста больше беспокоятся именно о данных, таких как распределение задержки, количество запросов в секунду и т. д., поэтому я не буду здесь вдаваться в подробности.
Функция пользовательского скрипта
Если штатные функции wrk не могут удовлетворить требованиям, то пользователю необходимо написать скрипт для решения этой проблемы. wrk официально предоставляет некоторыепример сценариядля справки. Конечно, сначала мы должны освоить базовый синтаксис lua, а затем нам нужно обратиться к информации, предоставленной wrk.луа-интерфейс. wrk предоставляет множество методов в трех циклах объявления: установка, выполнение и выполнение, которые используются для настройки потока, обработки запросов и ответов, а также пользовательского отображения окончательного сгенерированного отчета о тестировании. В сочетании со сценариями, wrk может выполнить значительную часть сложных требований к испытаниям под давлением. Многие учебные пособия по wrk здесь подробно не объясняют, но лично я считаю, что в этом суть wrk. Если вы хотите быть опытным в его использовании, вы должны иметь некоторое представление об использовании пользовательских скриптов.
Например, если вы хотите добавить к каждому запросу определенную задержку, вы можете выставить ее в wrkdelay
установить в функции:
function delay()
return math.random(10, 50)
end
Или, если вы хотите подвергнуть стресс-тестированию почтовые запросы, вы можетеwrk
Чтобы настроить это:
wrk.method = "POST"
wrk.body = "foo=bar&baz=quux"
wrk.headers["Content-Type"] = "application/x-www-form-urlencoded"
wrk2
wrk2Это эволюционная версия wrk, которая утверждает, что обеспечивает стабильную пропускную способность и более точную статистику задержек, что отражено в параметрах конфигурации, добавленных wrk2.--rate
параметры используются для установки пропускной способности и--u_latency
Параметр используется для отображения некорректной (статистически) статистики задержки. В остальном wrk2 мало чем отличается от wrk, и это более совершенный инструмент. Конечно, автор wrk2 очень скромный, и между строк полное почтение к wrk, ха-ха.
Заканчивать.
Эта статья была впервые опубликована в моем блоге (Нажмите здесь, чтобы просмотреть), добро пожаловать, чтобы следовать.