사내에서 http 부하테스트를 진행할일이 있어서 구축을 해보았다.
(실제로는 로컬에서 테스트했지만..)
Master -> slave 로 command 를 실행하고 result 를 받는다.
당연한것이겠지만 slave 가 많을수록 target 으로의 http request 를 많이 줄수있다.
master, slave 는 RMI 통신을 하기 때문에 같은 아이피 대역대애 있어야 한다..(예전에는 달라도 되게끔 셋팅을 했었던것같은데..까먹었다)
설치 요건
master, slave : 같은 jdk, jmeter 버젼을 사용, 같은 아이피 대역대(RMI 통신가능한..)
master 쪽 jmeter 설정
remote_hosts=10.0.0.10,10.0.0.11
server_port=1099
client.rmi.localport=1099
server.rmi.localport=1099
slave 쪽 jmter 설정
server_port=1099
client.rmi.localport=1099
server.rmi.port=1099
server.rmi.localport=1099
1. slave 쪽 jmeter 실행
2. master jmeter 실행
3. test case 생성후 remote run
http test 의 목적은 서버,서비스가 어느정도의 TPS 의 성능을 가지고 있는지 확인하기 위함이기 때문에
테스트를 할때는 아래의 케이스를 유의하면서 진행하는게 도움이 된다.
- target 서버의 resource monitoring
- jmeter test 진행중 tps 의 상승, 하강의 모니터링
- target 서버의 서비스 모니터링
tps 의 최고치를 확인하기 위해서 적당한 thread 의 수를 결정하기 위해 점차적으로 thread count 를 증가시킨다.
더이상 tps 가 올라가지 않는 경우는 아래와 같다
- 서비스의 response time 이 넘 올래걸리기 시작한다.(DB lock, DB pool count 의 문제등의 문제)
- 서비스의 cpu 가 100% 에 도달한다(서비스의 서버성능이 부족하다. pod 의 갯수를 증가시키거나 scale-out 을 고려한다)
- network bandwidth 에 도달.
- test 중에 error 가 늘어나기 시작하면 서비스 로그를 확인한다. 서비스의 한계인것인지. db connection 의 한계인지..기타 등등
- 서비스의 서버의 cpu, memory 가 준수한 상황인데 tps 가 올라가지 않는 다면 어디선가 bottleneck 이 있다. 그 bottleneck 을 찾아라!!