Поль­зовате­ли Linux зна­ют: в тер­минале мож­но тво­рить чудеса, если под рукой пра­виль­ный набор инс­тру­мен­тов. Покопав­шись в том, что исполь­зую сам, я отоб­рал то, что отно­шу к катего­рии «мас­тхэв».
 

wrk2

Ус­трой жес­ткий стресс‑тест сво­ему веб‑при­ложе­нию с помощью wrk2. Зада­ешь ути­лите количес­тво потоков и соеди­нений, сколь­ко зап­росов отправ­лять в секун­ду и вре­мя ата­ки. А потом наб­люда­ешь, выживет твое при­ложе­ние или завис­нет.

При­мер запус­ка:

wrk -t2 -c100 -d30s -R2000 http://127.0.0.1:8080/
Отчет wrk2
От­чет wrk2

warning

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

Лог Docker во время работы wrk2
Лог Docker во вре­мя работы wrk2

Ос­новные парамет­ры:

  • -t — чис­ло потоков (threads). Чем боль­ше потоков, тем шус­трее ути­лита будет управлять соеди­нени­ями;
  • -c — общее чис­ло одновре­мен­ных HTTP-соеди­нений (connections);
  • -d — про­дол­житель­ность ата­ки (duration). Фор­мат: 5s, 2m, 1h;
  • -R — количес­тво зап­росов в секун­ду (requests per second);
  • -H "Header: value" — добавить HTTP-заголо­вок к зап­росам. Под­держи­вает воз­можность ука­зать неог­раничен­ное количес­тво заголов­ков;
  • -L — вывес­ти под­робную ста­тис­тику задер­жек (HdrHistogram-style percentiles или distribution).

«Из короб­ки» ути­лита не уме­ет обхо­дить WAF, но под­держи­вает кас­томные скрип­ты на Lua. Скрип­ты поз­воля­ют кон­тро­лиро­вать весь про­цесс работы от под­готов­ки соеди­нения до его завер­шения. Ты без проб­лем выпол­нишь обфуска­цию зап­роса или дру­гие манипу­ляции по обхо­ду. Что­бы запус­тить wrk2 со скрип­том, исполь­зуй параметр -s <путь_к_файлу>.

Ус­танов­ка wrk2:

# Будем собирать wrk2 из сорцов. Если не установлены утилиты для сборки, установи
sudo apt-get install build-essential libssl-dev git -y
# Сам wrk2
git 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
Сравнение скорости выполнения sha1sum, sha256sum и base64
Срав­нение ско­рос­ти выпол­нения sha1sum, sha256sum и base64

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

Результат сравнения, сохраненный в JSON
Ре­зуль­тат срав­нения, сох­ранен­ный в JSON

warning

В опи­сании парамет­ров под запус­ком под­разуме­вает­ся запуск команд или скрип­тов, которые тес­тиру­ем при помощи hyperfine, — не самого hyperfine.

Продолжение доступно только участникам

Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».

Присоединяйся к сообществу «Xakep.ru»!

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    1 Комментарий
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии