<aside> wrk2는 스레드 기반이 아닌 이벤트 루프 모델을 사용하여 비동기 I/O를 통해 단일 스레드로도 많은 연결을 처리할 수 있습니다. 이로 인해 높은 성능과 효율적인 리소스 사용이 가능합니다.

nGrinder는 여러 대의 에이전트를 통해 분산 테스트를 지원합니다. 이로 인해 수천 또는 수백만 명의 사용자를 시뮬레이션할 수 있으며, 대규모 테스트를 효율적으로 수행할 수 있습니다.

</aside>

wrk2

JMeter는 각 사용자에 대해 별도의 Thread를 할당하는 Thread 기반 모델을 가지고 있습니다. 특정 상황에서는 수천 또는 수백만 명의 사용자를 시뮬레이션 해야 하는데, Jmeter는 유저 한 명당 하나의 쓰레드를 사용하다 보니 한 대의 PC에서 시뮬레이션 할 수 있는 사용자 수가 제한적입니다.

반대로 wrk2는 스레드가 독립적인 이벤트 루프를 통해 여러 개의 연결을 관리하도록 설계 되어 있습니다.

설치방법

sudo apt-get update
sudo apt-get install -y build-essential libssl-dev git zlib1g-dev
sudo git clone <https://github.com/giltene/wrk2.git>
cd wrk2
sudo make

사용방법

wrk2 -t4 -c400 -d30s -R1000 <http://example.com>

wrk2는 wrk의 C언어 코드 베이스를 확장하여 -R 옵션이 사용 가능합니다.

또 POST 요청일 때는 lua 파일을 통해 파라미터를 전달할 수 있습니다.

wrk.method = "POST"
wrk.headers["Content-Type"] = "application/json"

-- JSON 데이터
local json_data = [[
{
        "name" : "v1/dev/prev/20221024/4096c04f14ba4abc8f520a991e2c28a3.mp4",
        "timeout" : -1
}
]]

-- 요청 본문 설정
wrk.body = json_data

컨텐츠 타입이 application/json 일때

wrk.method = "POST"
wrk.headers["Content-Type"] = "application/x-www-form-urlencoded"

-- x-www-form-urlencoded 데이터
local form_data = "path=v1/dev/prev/20221024/4096c04f14ba4abc8f520a991e2c28a3.mp4&album_idx=813&music_idx=1104"

-- 요청 본문 설정
wrk.body = form_data