본문 바로가기

개발/Linux & DevOps

부하 테스트 툴 ngrinder 3.5.5 구축&사용 후기!

내 밑에서 일하는 사람들이 진짜 부하인지 테스트 하는 것을
부하테스트라고 한다. 어? 이게 아닌가?

목차

 

서론

회사에서 서버 증설에 따라
서버를 구축하고 성능을 테스트해볼 필요가 생겼다.

어떤 툴이 적절할까 알아보다가
대부분 부하 테스트 툴은 get / post 요청할 url 만 입력받는 형식인데,
자사 서비스는 단순 post 요청 방식으로 진행되지 않기 때문에
직접 스크립트를 작성할 수 있는 ngrinder 를 선택하게 되었다.

엔그라인더! 너로 정했어!

 

ngrinder 의 특징

  • 직접 Groovy, Jython 언어를 사용해 테스트 스크립트를 짤 수 있다.
    • Groovy는 Java와 거의 완벽 호환된다
  • 컨트롤러, 에이전트로 나눠 설치한다.
    • 여기서 컨트롤러란 유저, 스크립트, 에이전트를 관리하고, 테스트 분석, 통계를 해주는 모듈
    • 에이전트란 실제 스크립트를 실행시켜 서버에 부하를 주는 모듈
  • 설치가 엄청나게 간편하고 쉽다.

 

설치 - 컨트롤러

공식 github 를 통해 war 파일을 다운 받을 수 있다.
https://github.com/naver/ngrinder/releases

war파일을 ftp 업로드해 아래 명령어를 실행시켜준다.

nohup java -jar ngrinder-controller.war --port=8300 >>log_ngrinder.nohup&
// nohup과 &문자를 이용한 백그라운드 실행 + ssh 종료 후에도 실행 유지
// 8300 포트 아니어도 됨!

설치된 서버의 IP:8300 을 브라우저 url 에 입력하면


로그인 창이 뜬다.

초기 id pw admin admin 로 로그인이 된 모습.

User Management 에서 admin 비밀번호 바꾸기, 타 유저 삭제를 해주고

테스트에 사용할 스크립트를 짜준다.

여기까지하면 컨트롤러 설정 끝!

 

설치 - 에이전트

이미 실행중인 컨트롤러에 내장되어있다.

wget http://your_controller_ip/agent/download/ngrinder-agent-3.5.5-your_controller_ip.tar


컨트롤러의 IP가 박혀있기 때문에 별도로 수정할 필요는 없고,
바로 압축해제 후 실행시키면 된다. ( tar -xvf )

아무거나 골라 실행시켜놓고,
컨트롤러 웹사이트에 Manage Agent 탭에 가서 정상적으로 연결되는지 확인 가능하다.
Approved에 있다면 성공한 것.

Groovy 스크립트

Groovy - Everywhere - ♪

Ngrinder는 테스트 스크립트를 Groovy를 사용한다.
자체 생김새는 파이썬과 아주 유사하다.

def 변수/함수이름 = 값


과 같이 선언하고,
특히나 정규표현식 사용이 아주 좋았다.

def rescode =~/\d+/


와 같이 = 문자, ~ 문자, 두 / 문자 사이에 정규표현식을 넣으면 패턴 매치가 이뤄진다.

@Test
public void testfunc () {
	def a = 1 // Groovy 문법
    	def b = 1 // Groovy 문법
    
	assert a==b // Java 문법
}

와 같은 문구로 결과값 일치여부를 확인한다.
코드를 보면 알 수 있듯이,
Java 와 완벽 호환도 가능하고, Groovy 스크립트와 혼용도 가능하다.

 

테스트

ngrinder 의 설정방법 및 분석 결과 형태를 보면
왜 찬양받는지 알 수 있다.

위와 같은 설정으로 총 5대의 에이전트에게 스크립트를 실행시켰고,
임의로 각 서버에 50명의 가상유저를 부여했다.
1분간 테스트를 실시했다.

테스트 중인 모습이다.
CPU 사용률, MEMORY 사용률, RX = Received, TX = Transmitted
그래프 아래엔 Success 건수와 Error 건수를 확인할 수 있다.
TPS = Transection Per Second
MTT = Mean Transection Time

테스트가 끝나면, Log 를 정리해서 zip으로 묶어줘, 다운로드후 상세하게 왜 에러가 났는지 확인할 수 있다.
Detailed Report 를 눌러보자.

42초 쯤에 서버가 못버티고 에러를 많이 낸 부분을 확인할 수 있다.

TMI:
이 테스트는 두번 진행했더니 메모리 누수로 인해 톰캣이 죽었다!

 

최종 평가

Groovy 스크립트를 통해 자유롭게 테스트를 커스텀할 수 있는게 너무 큰 장점이고,
어찌 내 마음을 알고 내가 필요했던 기능들만 딱딱 들어있어서 깔끔한 프로그램이었다.
열심히 홍보하여 회사에서 적극 사용하게끔 하면 좋겠다.

반응형