Jmeter 는 아파치에서 배포하는 오픈 소스 성능 테스트 도구이다.
Jmeter 설치 전이면 이전 글을 보고 설치 후 이 글을 보도록 하자.
[IT/Server] - [Apache] Jmeter 성능 테스트 도구 사용법
공식 홈페이지를 가보면 다음과 같은 많은 기능들이 제공되는 아주 유용한 도구로 설명을 하고 있다.
다만 부하 테스트(load test) 시에는 CLI(Command-line mode) 모드로 진행하는 것을 안내하고 있다.
실제로 Jmeter GUI 환경에서 부하 테스트를 진행하게 되면 컴퓨터가 거의 뻗는 현상을 볼 수 있다.
물론 User, Second, Loop 설정(10, 5, 1, 힙 사이즈에 따라 다름)에 따라 소규모의 경우 GUI 로도 충분히 가능하지만, 일정 수준이 넘어가면 컴퓨터가 매우 버벅이며, 응답없음 현상만 볼 수 있다.(테스트 완료 조차 되지 않음, Heap memory를 아무리 늘려도 해결되지 않음)
일단 CLI 모드로 진행하기 전 jmeter.bat 파일의 Heap memory를 수정해야 한다. 윈도우 기준으로 설명하면 다음과 같다.
아래와 같이 힙 메모리 수정을 하고, 없는 파라미터는 추가를 해놓도록 하자.
# Heap memory 를 충분히 늘려야 부하 테스트가 가능하다.
# 본인 컴퓨터 사양에 맞도록 적절한 값으로 수정 필요, 예시는 6GB로 설정
if not defined HEAP (
rem See the unix startup file for the rationale of the following parameters,
rem including some tuning recommendations
set HEAP=-Xms6g -Xmx6g -XX:MetaspaceSize=6g -XX:MaxMetaspaceSize=6g
)
Jmeter CLI 모드 실행 명령어는 다음과 같다.
jmx file : 테스트 시나리오가 담긴 파일 ▷ Jmeter GUI 에서 작성하면 쉽다.
results file : 테스트 결과가 저장될 파일 csv 형식으로 저장된다.
Path to web report folder : HTML 형식으로 결과 파일이 저장될 위치 ▷ Chrome 으로 열면 그래픽 적인 화면으로 결과 보임
# Uses command
jmeter.bat -n -t [jmx file] -l [results file] -e -o [Path to web report folder]
# Example command
jmeter.bat -n -t "D:\Test\Jmeter_file_download.jmx" -l "D:\Test\Jmeter_file_download_result.csv" -e -o "D:\Test\20230103"
명령어 정상 실행 결과는 다음과 같은 화면으로 나온다.
Creating summariser <summary>
Created the tree successfully using D:\Test\Jmeter_file_download.jmx
Starting standalone test @ 2023 Jan 3 13:15:58 KST (1672719358827)
Waiting for possible Shutdown/StopTestNow/HeapDump/ThreadDump message on port 4445
Warning: Nashorn engine is planned to be removed from a future JDK release
summary + 1 in 00:03:03 = 0.0/s Avg: 175034 Min: 175034 Max: 175034 Err: 0 (0.00%) Active: 100 Started: 100 Finished: 0
summary + 4 in 00:00:58 = 0.1/s Avg: 227400 Min: 213115 Max: 239126 Err: 0 (0.00%) Active: 96 Started: 100 Finished: 4
summary = 5 in 00:04:01 = 0.0/s Avg: 216926 Min: 175034 Max: 239126 Err: 0 (0.00%)
summary + 17 in 00:00:31 = 0.5/s Avg: 255380 Min: 236038 Max: 266433 Err: 0 (0.00%) Active: 79 Started: 100 Finished: 21
summary = 22 in 00:04:32 = 0.1/s Avg: 246641 Min: 175034 Max: 266433 Err: 0 (0.00%)
summary + 78 in 00:00:23 = 3.4/s Avg: 279985 Min: 265303 Max: 292399 Err: 0 (0.00%) Active: 0 Started: 100 Finished: 100
summary = 100 in 00:04:55 = 0.3/s Avg: 272649 Min: 175034 Max: 292399 Err: 0 (0.00%)
Tidying up ... @ 2023 Jan 3 13:20:54 KST (1672719654478)
... end of run
CSV 결과 파일을 엑셀로 열어보면 대략 다음과 같이 보여진다. 한글 지원이 좀 안되는지 깨져나오는 부분이 있으나 보는데는 지장 없다. 아래 결과는 대략적으로 1 Thread 당 소요 시간이 평균 35초 정도 되는 것으로 보여진다. elapsed time 부분이다.
여기서는 41MB 가량의 파일 다운로드 테스트 였으나, 사용자가 몰리니 속도가 떨어지는 것을 확인할 수 있다.
그러나 정상 실행되지 않으면 다음과 같은 에러가 떨어질 경우가 있다. 보통 힙 메모리 초과로 인한 오류가 많다.
jmeter.bat 의 Heap memory 설정을 더욱 늘려줘야 한다.
Creating summariser <summary>
Created the tree successfully using D:\Test\Jmeter_file_download.jmx
Starting standalone test @ 2023 Jan 3 13:01:48 KST (1672718508512)
Waiting for possible Shutdown/StopTestNow/HeapDump/ThreadDump message on port 4445
Warning: Nashorn engine is planned to be removed from a future JDK release
java.lang.OutOfMemoryError: Java heap space
Dumping heap to java_pid43544.hprof ...
Heap dump file created [3587198451 bytes in 3.846 secs]
Uncaught Exception java.lang.OutOfMemoryError: Java heap space in thread Thread[Thread 그룹 1-23,5,main]. See log file for details.
Uncaught Exception java.lang.OutOfMemoryError: Java heap space in thread Thread[Thread 그룹 1-95,5,main]. See log file for details.
Uncaught Exception java.lang.OutOfMemoryError: Java heap space in thread Thread[Thread 그룹 1-13,5,main]. See log file for details.
Uncaught Exception java.lang.OutOfMemoryError: Java heap space in thread Thread[Thread 그룹 1-55,5,main]. See log file for details.
Uncaught Exception java.lang.OutOfMemoryError: Java heap space in thread Thread[Thread 그룹 1-35,5,main]. See log file for details.
Uncaught Exception java.lang.OutOfMemoryError: Java heap space in thread Thread[Thread 그룹 1-86,5,main]. See log file for details.
Uncaught Exception java.lang.OutOfMemoryError: Java heap space in thread Thread[Thread 그룹 1-16,5,main]. See log file for details.
Uncaught Exception java.lang.OutOfMemoryError: Java heap space in thread Thread[Thread 그룹 1-42,5,main]. See log file for details.
Uncaught Exception java.lang.OutOfMemoryError: Java heap space in thread Thread[Thread 그룹 1-1,5,main]. See log file for details.
Uncaught Exception java.lang.OutOfMemoryError: Java heap space in thread Thread[Thread 그룹 1-72,5,main]. See log file for details.
summary + 14 in 00:00:06 = 2.2/s Avg: 308069 Min: 303512 Max: 313306 Err: 0 (0.00%) Active: 0 Started: 100 Finished: 100
summary = 27 in 00:05:18 = 0.1/s Avg: 298965 Min: 258797 Max: 313306 Err: 0 (0.00%)
Tidying up ... @ 2023 Jan 3 13:07:06 KST (1672718826663)
... end of run
추가로 별도 폴더에 저장되는 HTML 형식의 결과는 다음과 같은 화면을 볼 수 있다.
Tip. 조금 더 편하게 사용하려면 jmeter.bat 가 담긴 bin 폴더의 위치를 시스템 변수의 PATH로 추가해두면 편리하다.