<aside> wrk2는 스레드 기반이 아닌 이벤트 루프 모델을 사용하여 비동기 I/O를 통해 단일 스레드로도 많은 연결을 처리할 수 있습니다. 이로 인해 높은 성능과 효율적인 리소스 사용이 가능합니다.
nGrinder는 여러 대의 에이전트를 통해 분산 테스트를 지원합니다. 이로 인해 수천 또는 수백만 명의 사용자를 시뮬레이션할 수 있으며, 대규모 테스트를 효율적으로 수행할 수 있습니다.
</aside>
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>
t4: 4개의 스레드를 생성합니다.c400: 400개의 연결을 설정합니다. 각 스레드는 100개의 연결을 담당합니다.d30s: 30초 동안 테스트를 실행합니다.R1000: 초당 1000개의 요청을 보냅니다.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