Содержание статьи
wrk2
Устрой жесткий стресс‑тест своему веб‑приложению с помощью wrk2. Задаешь утилите количество потоков и соединений, сколько запросов отправлять в секунду и время атаки. А потом наблюдаешь, выживет твое приложение или зависнет.
Пример запуска:
wrk -t2 -c100 -d30s -R2000 http://127.0.0.1:8080/

warning
Не используй wrk2 против чужих веб‑ресурсов, иначе получишь обвинение в DoS-атаке.

Основные параметры:
-
-t— число потоков (threads). Чем больше потоков, тем шустрее утилита будет управлять соединениями; -
-c— общее число одновременных HTTP-соединений (connections); -
-d— продолжительность атаки (duration). Формат:5s,2m,1h; -
-R— количество запросов в секунду (requests per second); -
-H— добавить HTTP-заголовок к запросам. Поддерживает возможность указать неограниченное количество заголовков;"Header: value" -
-L— вывести подробную статистику задержек (HdrHistogram-style percentiles или distribution).
«Из коробки» утилита не умеет обходить WAF, но поддерживает кастомные скрипты на Lua. Скрипты позволяют контролировать весь процесс работы от подготовки соединения до его завершения. Ты без проблем выполнишь обфускацию запроса или другие манипуляции по обходу. Чтобы запустить wrk2 со скриптом, используй параметр -s <.
Установка wrk2:
# Будем собирать wrk2 из сорцов. Если не установлены утилиты для сборки, установиsudo apt-get install build-essential libssl-dev git -y# Сам wrk2git clone https://github.com/giltene/wrk2.git
cd wrk2
make
sudo cp wrk /usr/local/bin
hyperfine
С этой тулзой ты сможешь выполнять бенчмарки для команд и скриптов, сравнивать время выполнения одной, двух и более команд с подробной статистикой по тестам. Сравни скорость работы трех программ с файлом в 100 Мбайт:
hyperfine \ --warmup 2 \ --prepare 'dd if=/dev/urandom of=./testfile bs=1M count=100 status=none' \ 'sha1sum ./testfile' \ 'sha256sum ./testfile' \ 'base64 ./testfile' \ --export-json hash-results.json

Вывод на экран показывает крайние значения тестов. Чтобы получить подробную инфу, используй экспорт в JSON, CSV, Markdown, AsciiDoc или orgmode. За экспорт отвечает параметр --export-<. Например: --export-json или --export-markdown.

warning
В описании параметров под запуском подразумевается запуск команд или скриптов, которые тестируем при помощи hyperfine, — не самого hyperfine.
Продолжение доступно только участникам
Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».
Присоединяйся к сообществу «Xakep.ru»!
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
