wrk 는 C 로 작성된 가볍고 현대적인 command line용 HTTP 부하 테스트 및 성능 측정 도구입니다.

kernel 의 epoll이나 kqueue 에 기반한 event 방식으로 동작하므로 실행하는 서버에 큰 부하를 주지 않으므로 저사양의 서버에서도 성능 측정에 필요한 부하를 줄수 있습니다.

또 ab 에 비해서 사용이 쉽고 lua 언어 interpreter 를 내장해서 lua 로 스크립트를 만든 후에 실행할 수도 있습니다.


설치

wrk 는 패키지로 제공되지 않으므로 컴파일러를 설치하고 직접 빌드해서 사용해야 합니다.


RHEL/CentOS 는 다음 패키지를 설치합니다.

sudo yum install make gcc git openssl-devel  
sudo yum -y install openssl-devel git
CODE


Ubuntu 는 다음 패키지를 설치합니다.

sudo apt install make gcc unzip git libssl-dev
BASH


wrk git 저장소를 복제합니다.

git clone https://github.com/wg/wrk.git 
cd wrk
BASH


가장 최근 버전(Ex; 4.1.0) 태그로 이동합니다.

git checkout tags/4.1.0
BASH


소스를 컴파일하면 wrk 바이너리가 생성됩니다.

make WITH_OPENSSL=/usr/
BASH


사용

주요 옵션은 커넥션 갯수를 지정하는 -c 와 쓰레드 갯수를 지정하는 -t, 지속 시간을 지정하는 -d 입니다.

  • -c, --connections <N>  Connections to keep open   
  • -d, --duration    <T>  Duration of test
  • -t, --threads     <N>  Number of threads to use   

다음은 12 개의 쓰레드를 400 개의 연결을 한 후에 30 초동안 요청을 전송합니다. 

$ wrk -t12 -c400 -d30s http://127.0.0.1:8080/index.php

Running 30s test @ http://127.0.0.1:8080/index.php
  12 threads and 400 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    44.36ms   82.08ms   1.70s    98.07%
    Req/Sec   176.84    119.42     1.04k    69.73%
  59915 requests in 30.11s, 3.60GB read
  Socket errors: connect 0, read 59915, write 0, timeout 0
Requests/sec:   1990.17
Transfer/sec:    122.33MB

BASH


lua 로 작성한 script 를 실행하려면 -s 뒤에 lua 스크립트 이름을 지정하면 됩니다.

wrk -s my-script.lua http://127.0.0.1:8080/index.html
BASH


같이 보기

Ref