일하는/Cloud, Web

[Testing][웹 서버 성능 테스트 도구] Wrk

김논리 2021. 11. 11. 16:38

https://github.com/wg/wrk

 

GitHub - wg/wrk: Modern HTTP benchmarking tool

Modern HTTP benchmarking tool. Contribute to wg/wrk development by creating an account on GitHub.

github.com


  • License: Apache 2.0
  • Multithreaded: Yes
  • Scriptable: Yes
  • Written in: C

Install

다음 명령어를 이용하여 설치할 수 있다.

# Mac OS
brew install wrk

How to use

10개의 thread를 생성하여 총 100개의 connection 요청을 수행(thread 별로 10개씩)하는 테스트를 30초 동안 진행할 경우, 다음과 같이 사용하면 된다.

wrk -t10 -c100 -d30s http://localhost:8000/api/ping

Flags

  • -c, --connections <N> : open 상태로 유지할 connection 수
  • -d, --duration <T> : 테스트 수행 시간
  • -t, --threads <N> : 사용할 스레드 수
  • -s, --script <S> : 읽어올 Lua 스크립트 파일
  • -H, --header <H> : 요청에 헤더 값 추가
  • --latency : latency 통계를 출력한다.
  • --timeout <T> : 요청 타임 아웃

Results

결과는 다음과 같은 형태로 확인 가능하다.

Running 30s test @ http://localhost:8000/api/ping
  10 threads and 100 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency   180.13ms   48.17ms 630.13ms   81.47%
    Req/Sec    55.08     18.74   151.00     71.85%
  16469 requests in 30.10s, 5.34MB read
  Socket errors: connect 0, read 350, write 1, timeout 0
Requests/sec:    547.15
Transfer/sec:    181.67KB
POST method를 사용하기 위해서는 Lua 스크립트를 작성하여 전송해야 한다.
wrk.method = "POST"
wrk.body = "{\"text\": \"양자 컴퓨팅이란 무엇인가?\"}"
wrk.headers["Content-Type"] = "application/json"
wrk.headers["Authorization"] = "Api-Key API Key Value"​
다음과 같이 스크립트 파일을 불러온다.
wrk -t1 -c1 -d1s -s script.lua http://localhost:8000/api/post_data​