wrk로 부하 테스트하는 방법

Posted at 2023-04-04 09:17:08
Modified at 2023-04-04 09:21:56
0

웹 사이트 또는 API 서버를 개발 중이라면, 이 사이트가 얼마나 많은 트래픽을 동시에 처리할 수 있는지 확인해보는 것이 좋습니다. 그래야 어느 정도의 트래픽을 감당할 수 있는지 예상을 할 수 있고, 그에 맞는 서버 스펙을 선정할 수 있기 때문입니다.

오늘은 wrk라는 툴로 부하 테스트하는 방법에 대해 살펴보겠습니다. wrk는 단일 멀티코어 CPU에서 실행할 때 상당한 부하를 생성할 수 있는 최신 HTTP 벤치마킹 도구입니다[1].

wrk 설치하기

먼저 wrk를 리눅스 서버에 설치하도록 하겠습니다. 다음 명령을 순차적으로 실행하세요.

  1. sudo apt install make gcc unzip git libssl-dev
  2. git clone https://github.com/wg/wrk.git
  3. cd wrk
  4. make
  5. sudo cp wrk /usr/local/bin

get 부하테스트

get 요청을 받을 수 있는 엔드포인트에 부하테스트를 해보겠습니다. 현재 여러분이 이용하고 계시는 asksim.co.kr에 해보겠습니다. 다음과 같은 명령을 실행하시면 됩니다.

wrk https://asksim.co.kr

wrk1

이 엔드포인트는 초당 974개의 요청을 처리할 수 있음을 확인할 수 있습니다. 10초간 2개의 쓰레드, 10개의 connection을 연 상태로 테스트를 한 결과입니다.

테스트 시간과 사용할 쓰레드 개수와 열어둘 connection의 개수를 지정하고 싶다면, 다음과 같이 옵션을 추가해서 명령을 날리면 됩니다. 이번에는 로그인 엔드포인트에 부하테스트를 하겠습니다.

10 쓰레드, 100 connection, 30초

wrk -t10 -c100 -d30s https://asksim.co.kr/auth/login

wrk2

wrk에서 사용할 수 있는 전체 옵션들은 다음과 같습니다[1].

-c, --connections: total number of HTTP connections to keep open with
                   each thread handling N = connections/threads

-d, --duration:    테스트 기간, e.g. 2s, 2m, 2h

-t, --threads:     사용할 쓰레드 총 개수

-s, --script:      LuaJIT 스크립트 사용할 시 파일 경로 앞에 붙여줌

-H, --header:      요청에 붙일 HTTP 헤더, e.g. "User-Agent: wrk"

    --latency:     상세한 latency 통계 출력

    --timeout:     record a timeout if a response is not received within
                   this amount of time.

post 부하테스트

이쯤이면 wrk로 post 요청을 받는 엔드포인트에 어떻게 부하테스트를 할 수 있을지 궁금하실 것입니다. lua라는 파일 확장자를 가진 파일(LuaJIT 스크립트)을 하나 작성해줘야 합니다.

post.lua라는 스크립트를 하나 만들고(파일명은 post가 아닌 다른 거라도 상관없습니다), 그 안에 다음과 같은 내용을 작성합니다. 여러분의 상황에 맞는 내용을 담으시면 됩니다.

wrk.method = "POST"
wrk.headers["content-type"] = "application/json"
wrk.body = '{"key1": "value1", "key2": "value2"}'

그 다음에 다음과 같은 명령을 수행하면 POST 요청으로 부하 테스트를 할 수 있습니다.

wrk -t10 -c100 -d30s http://localhost:8001/test -s post.lua 

참고자료

[1] https://github.com/wg/wrk

posted at 2023-04-04 09:17:08
Kyohoon Sim
Add a comment

Copyright © AskSim. All rights reserved.