목차
[Apache JMeter]
웹 성능을 측정하기 위해 대중적으로 가장 많이 사용한다고 한다.
Apache 재단에서 제공하는 오픈소스.
다양한 플러그인 제공
Master - Slave 개념으로 대량 부하 테스트도 가능.
아래 블로그 참조하여 기본적인 세팅 진행해봄
[전제조건]
JDK 8이상 설치
Windows 환경에서는 GUI 기반으로 구동가능 (.bat 파일제공)
[설치]
https://jmeter.apache.org/download_jmeter.cgi
binaries - zip 파일 다운로드 후 압축 풀기
/bin/jemeter.bat 로 실행
[플러그인 설치]
jmeter plugin manager 설정
https://jmeter-plugins.org/get/
다운로드 받은 후 ./lib/ext에 넣고 확인
Options-Plugins Manager 추가된 것 확인
Plugin Manager에서 아래 추가로 설치
- 5 Additional Graphs
- Custom Thread Groups
Transactions Per Second Plugin 설치
TPS 측정을 위해 많이 사용한다고 한다.
https://jmeter-plugins.org/?search=jpgc-graphs-basic
다운로드 후 ./lib 폴더와 ./lib/ext 폴더에 넣기
Add-Listener-jp@gc 3개 추가된 것 확인
[기본 세팅]
User Defined Variables
변수 세팅해놓고 여기저기서 쓸 수 있다.
Transactions per Second, Thread Group 추가
Number of Threads (users): 스레드 수
Ramp-up period (seconds): 사용자의 Think Time으로 사용자가 몇초에 한 번 서비스를 클릭하는지에 대한 값이다. 또한 지정한 수 만큼의 Thread가 실행되기까지 걸리는 시간을 의미한다.
(ex: Thread 수가 300이고, Ramp-up period가 1이면 300개의 Thread가 1초만에 생성된다)
Loop Count: 몇 번 반복해서 요청할 것인가?
예제세팅) 100개의 스레드가 100초 간격으로 요청하니까 스레드당 1초 단위로 100회씩 request threads를 발생시킨다 (TPS: 100)
number of threads: 100
Ramp-up period: 100
Loop Count: 100
=> 총 요청수 number of threads * loop count = 10000 이 된다.
Specify Thread lifetime
- Duration
- startup delay (seconds): 설정한 시간 후 테스트 시작
HttpRequest 추가
Protocol: http
Server Name: ${server_ip}
Port Number: ${server_port}
HTTP Request: GET/POST
Path: "/test"
Body Data
Advanced - Implementation - HttpClient4 선택
POST 호출인 경우 아래 Http Header Manager 추가 세팅
Content-Type: application/json
Result Viewer 추가
View Results Tree, Summary Report 2개 추가
[Remote Test (부하 분산 테스트)]
대용량 테스트를 할 때는 JMeter 한 대로는 성능이 안나와 힘들 수 있어서 여러 대의 부하발생기를 연결해서 동시에 테스트 해야한다.
JMeter에서 제공하고 있다.
- JMeter Controller: 부하 발생기들에 명령을 전달하는 Master 역할
- JMeter Server: 실제 부하를 발생시키는 노드들. Controller에서 명령을 받고 수행 후 결과를 다시 Controller에 반환한다.
/bin/jmeter.properties 파일에서 역할별로 설정을 수정 한 후 구동하게 된다.
Master 설정
remote_hosts=remote_server:2099, remote_server2:2099 client.rmi.localport=2099 server.rmi.ssl.disable=true |
설정 후 JMeter.bat 실행시켜서 Remote 목록 확인
Slave 설정
server_port=2099 server.rmi.localport=4000 #내부적으로 사용하는 포트인듯 server.rmi.ssl.disable=true |
설정 후 /bin/Jmeter-server.bat 실행.
아래처럼 나오면 성공
명령 수행
Master 서버에서 Run - Remote Start (All)
Slave 서버에서 아래처럼 나오면 성공
Linux 환경에서 구동하기
Windows 서버를 Master로 두고, Linux 서버를 Slave로 두어 구동해보기
세팅방식은 동일하나 linux 서버에서 아래 명령어로 구동한다.
$ cd ./bin
$ sudo ./jemeter-server
#아래처럼 나오면 구동 성공
Using local port: 4000
Created remote object: UnicastServerRef2 [liveRef: [endpoint:[ip:4000](local),objID:[49488e19:17e08b4de07:-7fff, -4386202146275920573]]]
#Windows에서 구동 후 아래같은 로그가 찍힌다.
Starting the test on host server:2099 @ Thu Dec 30 09:22:56 KST 2021 (1640823776010)
Finished the test on host server:2099 @ Thu Dec 30 09:22:57 KST 2021 (1640823777494)
[기타 플러그인들]
jp@gc - Ultimate Thread Group
- Start Thread Count: 스레드 수
- Initial Delay: 시작 시 지연
- StartUp Time: 모든 스레드가 올라오는데 걸리는 시간
- Hold Load For: 부하 유지 시간
- Shutdown Time: shutdown을 해당 시간만큼 시간들여서 수행
Timer
일정한 TPS를 내기위해 timer를 써야하는듯하다.
Target Throughput
60: 초당 1번 요청한다는 의미
=> 스레드수 1000이고 Target Throughput이 60인 경우 스레드 1000개가 초당1번 요청하므로 TPS = 1000으로 유지된다.
600이면 TPS 10000을 기대할 수 있음.
[Trouble Shootings]
java.net.BindException: Address already in use: connect
테스트 과정에서 위 오류가 발생하면서 실패하는 경우가 빈번히 있었다.
찾아보니.. 아래처럼 해결하라고 함.
https://blog.naver.com/yeom7707/90047989629
- cmd - regedit
- HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
- MaxUserPort 10진수로 65564로 설정
- 재부팅
[Test Plan 샘플 파일]
[참조]
https://blog.naver.com/yeom7707/90047989629
'이것저것' 카테고리의 다른 글
Ansible 설치하기 (0) | 2023.04.15 |
---|---|
nGrinder (0) | 2023.04.08 |
Intellij 단축키 모음 (0) | 2023.03.09 |
MSA에서 Outbox Pattern에 대해 (0) | 2022.11.20 |
Materialized View란? (0) | 2022.11.06 |