IT/Server

[Apache] Jmeter(제이미터) 부하 테스트 방법(콘솔 명령어 기반)

토마토조아 2023. 1. 3. 14:05
728x90

 

Jmeter 는 아파치에서 배포하는 오픈 소스 성능 테스트 도구이다.

Jmeter 설치 전이면 이전 글을 보고 설치 후 이 글을 보도록 하자.
[IT/Server] - [Apache] Jmeter 성능 테스트 도구 사용법

 

[Apache] Jmeter 성능 테스트 도구 사용법

우리가 서버를 개발하다 보면 반드시 해야하는 작업들이 존재한다. 기획 ▶ 개발 ▶ 검증 과 같은 당연한 일들을 해야 하는데.. 제일 중요한 것은 역시나 검증 부분이다. 검증 부분에서는 당연히

like-tomato.tistory.com

 

공식 홈페이지를 가보면 다음과 같은 많은 기능들이 제공되는 아주 유용한 도구로 설명을 하고 있다.
다만 부하 테스트(load test) 시에는 CLI(Command-line mode) 모드로 진행하는 것을 안내하고 있다.

 

Apache JMeter - Apache JMeter™

Apache JMeter™ The Apache JMeter™ application is open source software, a 100% pure Java application designed to load test functional behavior and measure performance. It was originally designed for testing Web Applications but has since expanded to oth

jmeter.apache.org

 

실제로 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로 추가해두면 편리하다.

728x90