nGrinder 이용하여 부하 테스트 해보기 ! (mac 기준 설치)

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

 

NVPair (The Grinder Documentation)

public final class NVPair extends java.lang.Object This class holds a Name/Value pair of strings. It's used for headers, form-data, attribute-lists, etc. This class is immutable. Author: Ronald Tschalär

grinder.sourceforge.net

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

 

naver/ngrinder

enterprise level performance testing solution. Contribute to naver/ngrinder development by creating an account on GitHub.

github.com

 

테스트를 진행하기 전 알아두면 좋은 점

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://youtu.be/47_CV25nC5M

 

- 테스트 방법 

https://brownbears.tistory.com/26

 

[nGrinder] 사용법 및 테스트

앞서 nGrinder가 어떻게 동작하고, 자주 사용되는 용어를 확인했다면, 지금부터는 실제로 테스트를 하면서 테스트 확인 페이지에 나오는 용어 및 그래프들에 대한 설명을 하겠습니다. 로컬환경 VirtualBox Virtual..

brownbears.tistory.com

 


http://woowabros.github.io/experience/2018/05/08/billing-performance_test_experience.html

 

결제 시스템 성능, 부하, 스트레스 테스트 - 우아한형제들 기술 블로그

안녕하세요. 우아한형제들에서 결제시스템을 개발하고 있는 권용근입니다. 입사한 지 4개월 만에, 드디어 우아한형제들 기술 블로그에 글을 남기게 되어 감회가 새롭습니다.

woowabros.github.io

 

- Tomcat Thread에 대해 알기

https://tomcat.apache.org/tomcat-8.0-doc/config/executor.html

 

Apache Tomcat 8 Configuration Reference (8.0.53) - The Executor (thread pool)

The Executor represents a thread pool that can be shared between components in Tomcat. Historically there has been a thread pool per connector created but this allows you to share a thread pool, between (primarily) connector but also other components when

tomcat.apache.org