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