아무거나

Ngrinder을 사용한 부하 테스트 본문

Infra/DevOps

Ngrinder을 사용한 부하 테스트

전봉근 2020. 12. 26. 04:40
반응형

Ngrinder Document

설명

  • Load Test

    • 부하 테스트 혹은 스트레스 테스트라고 한다
    • 일부러 시스템에 부하를 발생시킴
    • 얼마만큼의 부하를 버틸 수 있는지 평가한다
  • Ngrinder란?

    • Load Test를 하기위한 소프트웨어이다
    • NHN에서 개발
    • 오픈소스 부하 테스트 도구인 grinder를 기반으로 작성
    • 웹 기반으로 테스트를 진행할 수 있다
    • 복수의 장비를 이용해서 대상 시스템에 큰 부하를 발생시킬 수 있다
    • 스크립트를 작성하여 테스트 시나리오를 만들 수 있다
  • Ngrinder 구성요소

    • Controller
      • 웹 기반 GUI 시스템
      • 유저 관리(멀티 유저 기반)
      • 에이전트 관리
      • 부하 테스트 실시 & 모니터링
      • 부하 시나리오를 작성하고 테스트한 내역을 저장하고 재활용 할 수 있다
    • Agent
      • 부하를 발생시키는 대상 또는 주체라고 한다
      • Controller의 지휘를 받는다
      • 복수의 머신에 설치해서 Controller의 신호에 따라서 일시에 부하를 발생시킨다

설치

  • 필수 설치사항 ( 해당 포스팅 버전은 java JDK 11 + Tomcat8 버전을 사용함 )

    • ngrinder controller
      • java JDK 1.6 이상
      • tomcat 6.x 이상 
    • ngrinder agent
      • java JDK 1.6 이상
  • ngrinder controller(=ui) 설치

    • tomcat 설치
        $ wget https://downloads.apache.org/tomcat/tomcat-8/v8.5.61/bin/apache-tomcat-8.5.61.tar.gz
        $ sudo tar xzf apache-tomcat-8.5.61.tar.gz
        $ sudo mv apache-tomcat-8.5.61 /usr/share/tomcat8
      
    • tomcat 환경변수 추가 (마지막 아래 하기 2줄 추가)
      • $ sudo vi /etc/profile
          export CATALINA_HOME=/usr/share/tomcat8
          export PATH=$PATH:$CATALINA_HOME/bin
        
      • 적용 및 확인
          $ source /etc/profile
          $ echo $CATALINA_HOME
        
    • tomcat 실행
      • $ sudo sh /usr/share/tomcat8/bin/startup.sh
    • tomcat 서비스 등록
      • $ sudo vi /etc/init.d/tomcat8
          #!/bin/bash
          # description: Tomcat Start Stop Restart
          # processname: tomcat8
          # chkconfig: 234 20 80
        
          JAVA_HOME=$JAVA_HOME
          export JAVA_HOME
        
          PATH=$JAVA_HOME/bin:$PATH
          export PATH
        
          CATALINA_HOME=/usr/share/tomcat8
        
          case $1 in
        
          start)
          sh $CATALINA_HOME/bin/startup.sh
          ;;
        
          stop)
          sh $CATALINA_HOME/bin/shutdown.sh
          ;;
        
          restart)
          sh $CATALINA_HOME/bin/shutdown.sh
          sh $CATALINA_HOME/bin/startup.sh
          ;;
        
          esac
          exit 0
        
      • 파일 저장 후 권한 변경
          $ sudo chmod +x /etc/init.d/tomcat8
          $ sudo chmod 755 /etc/init.d/tomcat8
        
      • centos가 재시작되면 자동으로 tomcat이 실행되도록 chkconfig에도 추가 -> systemd를 더 많이 사용하므로 기회가되면 다르게 적용하자
          $ sudo chkconfig --add tomcat8
          $ sudo chkconfig --list tomcat8
        
      • tomcat 로그 및 webapps 권한 설정
          $ sudo chown -R bkjeon:bkjeon /usr/share/tomcat8/logs
          $ sudo chown -R bkjeon:bkjeon /usr/share/tomcat8/webapps
          $ sudo chmod -R u+rw /usr/share/tomcat8/logs
          $ sudo chmod -R u+rw /usr/share/tomcat8/webapps
        
      • tomcat에 JAVA_OPTS 추가 (ngrinder은 메모리를 많이 잡아먹으므로 메모리를 늘려준다)
        • $ sudo vi /usr/share/tomcat8/bin/catalina.sh
            ...
            # 주석이 끝나는 부분에 추가
            JAVA_OPTS="-Xms600m -Xmx1024m -XX:MaxPermSize=200m"
            ...
          
        • $ sudo service tomcat8 restart
      • tomcat 프로세스 및 로그 확인
          $ ps -ef | grep java  // 프로세스
          $ sudo tail -f /usr/share/tomcat8/logs/catalina.out // 로그
        
      • ngrinder controller 설치
          $ cd /usr/share/tomcat8/webapps/
          $ wget https://github.com/naver/ngrinder/releases/download/ngrinder-3.5.3-20201127/ngrinder-controller-3.5.3.war
        
      • ngrinder 접속
        • $ http://<서버 IP>:<서버 Port>/ngrinder-controller-3.5.3
        • admin / admin 으로 로그인
      • admin password 변경
        • 우측 상단의 admin 프로필 클릭 > 사용자 관리 > admin user 클릭
        • 비밀번호 변경을 클릭하여 새로운 비밀번호로 저장하자.(전화번호는 필수 값이므로 입력 필요)
  • ngrinder agent 설치

    • ngrinder agent 다운
      • ngrinder web에서 우측 상단에 프로필 클릭 후 에이전트 다운로드 링크를 복사하여 wget으로 다운
        $ cd /usr/local
        $ sudo wget http://{grinder web ip}/ngrinder-controller-3.5.3/agent/download/ngrinder-agent-3.5.3-192.168.0.208.tar
        $ sudo tar xvf ngrinder-agent-3.5.3-192.168.0.208.tar
        $ sudo rm -f ngrinder-agent-3.5.3-192.168.0.208.tar
      
    • java 환경변수 설정 (안되있으면 참조)
        // ~/.bashrc에 하기 내용을 추가
        export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::")
      
    • 자신의 소유로 run_agent.sh의 권한을 변경한다. 필자는 bkjeon라는 아이디를 사용하고 있기 때문에 아래와 같이 설정
        $ sudo chown bkjeon:bkjeon /usr/local/ngrinder-agent/run_agent.sh
      
    • run_agent에 실행권한을 부여
        $ sudo chmod u+x /usr/local/ngrinder-agent/run_agent.sh
      
    • agent 실행
        // waiting for agent controller server signal 이 표시되면 정상적으로 실행 -> ngrinder web에서 에이전트 관리 리스트에서도 표시되면 OK
        $ /usr/local/ngrinder-agent/run_agent.sh
      
    • 만약 controller과 agent가 서로 다른머신에 설치되어 있거나 아니면 하나의 컨트롤러에 여러 agent로 구성했으면 해당 agent의 세팅을 agent.conf에서 변경하자 $ vi ~/.ngrinder_agent/agent.conf
        ...
          start.mode=agent
          agent.console.ip=127.0.0.1  // controller가 설치되어있는 ip or domain으로 변경
        ...
      
  • ngrinder 부하 테스트

    • ngrinder web에서 Quick Start에 URL을 입력 후 테스트 시작 클릭
    • 설명
      • 에이전트: ngrinder agent 개수
      • 에이전트별 가상사용자: 각각 agent별 동시접속자 수
        • ex) 에이전트:10, 에이전트별 가상사용자:10 -> 10개의 에이전트가 각각 10명씩 사용자를 만드므로 즉, 100명의 동시접속자 수를 생성
        • 프로세스와 쓰레드 설정
          • 주로 쓰레드를 사용하라고 권장
          • 프로세스를 사용하는 경우는 독립된 에이전트를 통해서 접속해야하는 경우에 사용
        • Ramp-Up 사용
          • 조금씩 사용자를 늘려나갈 때 해당 기능을 사용
          • 늘어나는 사용자의 숫자를 프로세스이기 때문에 Ramp-Up 기능을 사용하려면 프로세스 숫자를 높여야한다. (openjdk 기준으로 프로세스를 증가시킬 경우 오류가 발생한다. oraclejdk는 문제 없음)
          • x축: 시간흐름, y축: 동시접속자
          • ex) 초기 대기시간:2, Ramp-Up 주기: 2000 -> 즉, 2초마다 2개의 프로세스가 생성
        • 스크립트
          • 사용자의 실제 사용 패턴을 시뮬레이션 하거나 처리해야될 로직들을 수정할 수 있다. (자세한 내용은 공부 필요)
        • 실행 횟수
          • ex) 에이전트:10, 에이전트별 가상사용자:10, 실행횟수:10 -> 10 * 10 * 10 = 1000 이므로 즉, 1000명의 동시접속자 수를 생성
      • 모든 설정이 끝난 후 저장 또는 저장 후 시작을 클릭
      • 테스트 보고서 설명
        • TPS(=Transaction Per Second): 초딩 처리량 즉, 높을수록 좋다
        • MTT(=Mean Test Time) -> 평균 테스트 시간
          • ex) 20.12 이면 ms단위이므로 0.02초이다
반응형
Comments