2019. 8. 13. 01:31ㆍ카테고리 없음
nGrinder를 이용해 서버 부하 테스트를 진행해봅니다.
nGrinder는 간단하게 설명하자면
성능 측정 목적으로 개발된 오픈소스 프로젝트로 NHN 사단이 개발했다고 합니다.
부하를 줄 수 있는 인터페이스와 테스트 결과를 통계로 제공하며
Groovy 스크립트로 테스트 시나리오를 작성합니다.
Spring boot + Jpa를 이용해 웹 어플리케이션의 서버 단 개발을 하였고
nginx 웹 서버에 웹 어플리케이션이 배포된 상태입니다.
nGrinder를 활용해 간단하게 구현한 api별로 스트레스를 주었을 때
서버가 다운되는 시점과 error가 발생하는 시점 등을 파악하고자 합니다 !
글의
순서는 대략 아래와 같이 되겠습니다.
nGrinder 설치 (자바 설치 -> Controller 설치 -> Agent 설치)
-> Script 작성
-> Test 생성 및 실행 (스트레스 와르르)
-> 분석
nGrinder 설치
nGrinder 다운 방법이나 간단한 사용법이 공식 페이지에 설명이 잘되어있지만,
간략히 기억하는 용도로 제 블로그에도 작성해봅니당.
nGrinder는 자바 기반입니다. 따라서 자바 설치가 되어 있어야 하는데 저는 자바가 깔려있다는 가정하에 시작하겠습니다.
you need Oracle JDK 1.6~ or OpenJDK 1.7~.
1. Controller 다운
아래 주소에서 Controller 파일을 다운 받습니다.
https://github.com/naver/ngrinder/releases
전 ngrinder-controller-3.4.3.war을 다운받았습니다.
다운받은 파일을 톰캣을 이용해 실행시키는 방법과 직접 실행시키는 방법 2가지가 있습니다. (혹은 도커에 설치)
저는 그 중 직접 실행시키는 방법으로 하겠습니다. (톰캣으로 실행시키는 방법 -> 참고 블로그 )
terminal에서 다운받은 경로로 이동하여
아래 명령어를 실행시킵니다.
$ java -XX:MaxPermSize=200m -jar ngrinder-controller-3.4.3.war
포트가 이미 사용중이라는 에러가 발생할 경우 아래와 같이
-p '사용중이지 않은 포트번호' 를 추가하여 실행해줍니다.
$ java -XX:MaxPermSize=200m -jar ngrinder-controller-3.4.3.war -p 7777
아래와 같이 실행이 완료되면
2. Agent 다운
브라우저로
http://127.0.0.1:8080/ 에 들어갑니다.
(포트 번호는 변경될 수 있습니다.)
아이디와 비밀번호는 둘 다 admin으로 입력해주면 됩니다.
로그인 후,
우측 상단에 admin 토글을 클릭하여 Download Agent를 눌러 agent tar 파일을 다운받습니다.
ngrinder-agent-3.4.3-127.0.0.1.tar 파일이 버전에 맞춰 다운이 완료되었다면
압축파일을 풀어줍니다.
terminal에서 다운 폴더로 이동, 아래 명령어를 실행해줍니다.
$ ./run_agent.sh
agent가 실행되면 완료 !
실행한 agent를 확인 및 관리하고 싶다면
다시 nGrinder 브라우저로 돌아가 Agent Management 탭에서 할 수 있습니다.
agent의 controller나 port 설정은
압축 해제 파일에 위치한 agent.conf에서 따로 할 수 있습니다.
Script 작성
groovy로 테스트 스크립트를 작성할 수 있습니다.
테스트하고자 하는 api URL 를 입력하여 기본 스크립트를 생성하고,
api 호출 시 필요한 헤더 정보와 파라미터 데이터들을 생성하여 호출과 함께 전달할 수 있도록 작성합니다.
상단의 script를 눌러 해당 탭으로 이동합니다.
create a script 버튼을 누르면
아래와 같이 script 이름과 http 메소드와 URL을 입력하는 창이 뜹니다.
create 버튼을 누르면 기본으로 생성되는 스크립트가 뜨고
우리는 이를 이용해 필요한 헤더, 파람등을 작성해줍니다.
각각 메소드 별 기능과 객체에 대한 공부는 따로 ! -> 참고
간단하게 NVPair 객체 참고 !
http://grinder.sourceforge.net/g3/script-javadoc/HTTPClient/NVPair.html
script 작성이 완료되면
우측 상단의 Validate Script 를 눌러 스크립트가 잘 작성되었는지 확인해줍니다.
잘 작성되었을 경우, 스크립트 하단에 대략 다음과 같이 뜹니다.
Starting threads
Finished ...
에러가 뜰 경우 알아서 해결한 후 !
Save 버튼을 눌러줍니다.
Test 진행
다음으로 작성한 스크립트를 이용하여 본격적인 test를 진행해봅니다.
상단의 Performance Test를 눌러 이동합니다.
create Test 버튼을 눌러 Test를 생성합니다.
Agent : 우리는 앞서 1개만 설치했습니다. 따라서 Max 1
Vuser :
Agent * Vuser이 실제 사용자 수라고 생각할 수 있겠습니다.
테스트 필요에 따라 설정을 마친 후
Save and Start를 하면 바로 실행 혹은 예약 실행이 가능합니다.
실행 결과에 따라 그래프가 그려지고 Detailed Report 를 통해 좀 더 자세히 볼 수 있습니다.
- 평균 TPS, 최고 TPS, 평균 Test 시간, Error 개수
그나저나
사용방법에 대한 공부는 역시나 공식문서가 가장 좋습니다.....
https://github.com/naver/ngrinder/wiki/User-Guide
테스트를 진행하기 전 알아두면 좋은 점
1. nGrinder의 구성요소
- Controller : 부하테스트를 위한 웹 인터페이스 제공. 테스트 결과를 통계로 보여주는 역할로
Agent에게 부하 일을 시킴
- Agent : Target Sever에 가상 사용자들이 접근하도록 일을 시키는 역할
Controller에 연결되어
- Target Server : 테스트 할 대상 서버
2. Agent 환경
테스트를 실행하는 에이전트의 환경 (본인의 로컬 환경, 로컬 자원)에 따라 수용할 수 있는 Vuser가 다릅니다.
따라서 미리 확인해두어 성능 테스트를 분석적으로 진행해봅시다.
Agent 환경의 core - 4 / 4g ram일 경우 Vuser는 1만개가 적정 수치라고 합니다.
- mac에서의 core, thread 개수
$ sysctl -a | grep cpu
core_count : 2
thread_count : 4
hw.ncpu : 4
- Target Server의 스레드 개수
Tomcat8의 경우 기본적으로 다음과 같습니다. (default)
threadPriority : 5
maxThreads : 200
minSpareThreads : 25
maxQueueSize : integer.MAX_VALUE -> 2147483647
3. nGrinder 로그 파일 확인하는 법
성능 테스트한 결과가 Controller에 로그로 남습니다.
로그가 남는 경로는
${user.home}/.ngrinder/perftest
1 ~ 999까지 테스트한 순서대로 쌓인 로그를 확인할 수 있습니다.
참고
- 그루비 설치
brew install groovy
- 영상으로 nGrinder 사용법 배워보기
- 테스트 방법
https://brownbears.tistory.com/26
http://woowabros.github.io/experience/2018/05/08/billing-performance_test_experience.html
- Tomcat Thread에 대해 알기
https://tomcat.apache.org/tomcat-8.0-doc/config/executor.html