크리에이티브 커먼즈 라이선스
Creative Commons License

이 가이드는 nGrinder 3.3 이후 버전의 설치 방법을 다루고 있습니다. nGrinder 3.2 대 버전에 대한 설치 가이드를 보고 싶으시면, nGrinder 3.2 : 설치방법 을 참고하시기 바랍니다.
3.3 버전은 곧 출시됩니다~!!

사전 준비 사항

  • nGrinder 는 웹 어플리케이션인 컨트롤러와 자바 어플리케이션인 에이전트, 모니터로 구성되어 있습니다. 만약 컨컨트롤러와 에이전트가 뭔지 알고 싶으시다면, 아키텍처를 참고하세요.
    nGrinder 컨트롤러와 에이전트를 설치하려면 설치할 서버에 오라클 JDK 1.6 이후 버전 또는 오픈JDK 1.7 이후 버전이 설치할 서버에 사전 설치되어 있어야 합니다.
  • PATH 환경 변수를 먼저 확인하셔서 Java 의 바이너리 위치가 PATH에 들어와 있는지 확인해 주세요.
  • nGrinder 는 컨트롤러와 에이전트간의 통신을 위해 많은 포트를 사용합니다. 만약 방화벽에 의해 일부 포트가 막혀 있다면, 네트워크 관리자에게 문의하여 아래 포트들을 열어달라고 요청하셔야 합니다. 설정을 통해 사용할 포트를 수정할 수도 있습니다.
    • 에이전트:모든 포트 ==> 컨트롤러 : 16001
    • 에이전트:모든 포트 ==> 컨트롤러 : 12000 ~ 12000 + 동시 테스트 허용할 테스트 개수
    • 컨트롤러:모든 포트 ==> 모니터:13243
    • 컨트롤러 ==> 일반 유저 : 웹 서버 설정 방식에 따르나, 디폴트는 8080 입니다.

다운로드

nGrinder 3.3 의 설치 파일은 다음 링크에서 다운로드 할 수 있습니다.

다운된 war 파일은 반드시 스페이스가 포함되지 않은 폴더에 설치하셔야 합니다. 예를 들어 C:\Program Files\tomcat\webapps 같은 폴더는 Program Files 라는 패스에 스페이가 들어가게 되므로 문제가 됩니다.

컨트롤러 설치하기

nGrinder 3.3 은 Jenkins와 유사하게 자체적으로 실행 가능한 웹 아카이브 파일(WAR)로 배포됩니다. 따라서 WAR 파일을 직접 자바로 실행할 수도 있고, 아니면 톰캣같은 웹 어플리케이션 서버에 올려서 실행할 수도 있습니다. 초보자인 경우에는 직접 실행하기를 권장 드리고, 전문가이시면 톰캣에 설치하기를 권장 드립니다.

직접 실행하기

  1. PATH와 JAVA_HOME 환경 변수가 잘 정의되어 있는지 확인합니다. 특히 PATH 환경 변수를 잘못 설정함에 발생하는 문제가 상당히 많습니다. 따라서 자바의 실행 패스가 PATH의 제일 앞 단에 있는지 확인 합니다. 예를 들어 윈도우 서버 버전에서는 디폴트로 1.4 버전의 자바가 이미 PATH 안에 설정되어 있는 경우가 있습니다. 따라서 PATH 맨 뒤에 신규 자바를 넣을 경우, 신규 버전의 자바가 아닌  1.4 버전대의 자바가 실행되고는 합니다. 따라서 윈도우에서 반드시 PATH가 C:\Program Files\Java\Your_Java_Version\bin;BlarBlar... 과 같이 맨 앞에 설정되도록 합니다.
  2. 다운받은 nGrinder 컨트롤러를 다음과 같이 실행합니다.
    java -jar ngrinder-controller-X.X.war
  3. 그러면 다음과 같은 에러 메시지를 보시게 될 겁니다.
    nGrinder needs quite big perm-gen memory.
    Please run nGrinder with the following command.
    java -XX:MaxPermSize=200m -jar  ngrinder-controller-3.3.war

    nGrinder 는 꽤 많은 PermGen 메모리를 필요로 합니다. 왜냐하면, 편리하게 한 개의 패키지로 구성하다 보니, 꽤나 많은 라이브러리(SVNKit, Maven, Jetty Web Server, Groovy, Jython등)를 한 통으로 포함하게 되었고, 이에 따라 메모리 요구량이 많아 졌기 때문입니다.
  4. 디폴트로 nGrinder 은 웹서버 포트로 8080을 사용합니다. 만약 다른 포트를 사용하고자 한다면, 실행 시에 --port 옵션을 주어 포트를 재설정 하면 됩니다. 다음은 최종 실행 커멘드 입니다.
    java -XX:MaxPermSize=200m -jar  ngrinder-controller-3.3.war --port 80
  5. 위와 같이 WAR 파일을 실행하면, WAR 파일은 ${user.home}/.ngrinder/webapp 폴더로 압축이 풀리게 됩니다. ${user.home}/.ngrinder 폴더에는 실행 파일 내에도 DB 나 설정 파일 같은 각종 파일들도 같이 생성됩니다.
  6. 화면에 웹 서버를 띄우면서 로그를 출력하게 됩니다. 만약 다음과 같은 화면을 보게 된다면, nGrinder 컨트롤러가 실행 준비 된 겁니다.
    INFO 14. 1. 20 오후 4:39:liquibase: ChangeSet ngrinder_datachange_logfile/db.changelog_schema_22.xml::22::ngrinder.3.3 r
    an successfully in 4ms
    INFO 14. 1. 20 오후 4:39:liquibase: ChangeSet ngrinder_datachange_logfile/db.changelog_schema_23.xml::23::ngrinder.3.3 r
    an successfully in 7ms
    INFO 14. 1. 20 오후 4:39:liquibase: ChangeSet ngrinder_datachange_logfile/db.changelog_schema_24.xml::24::ngrinder.3.3 r
    an successfully in 2ms
    INFO 14. 1. 20 오후 4:39:liquibase: ChangeSet ngrinder_datachange_logfile/db.changelog_schema_25.xml::25::ngrinder.3.3 r
    an successfully in 7ms
    INFO 14. 1. 20 오후 4:39:liquibase: ChangeSet ngrinder_datachange_logfile/db.changelog_schema_26.xml::26::ngrinder.3.3 r
    an successfully in 8ms
    2014-01-20 16:39:30.633:INFO:/:Initializing Spring FrameworkServlet 'appServlet'
    2014-01-20 16:39:31.141:INFO::Started SocketConnector@@0.0.0.0:80
  7. 브라우저를 열고 http://localhost 로 접근해 보세요.

톰캣에 설치하기

  1. 먼저 톰캣을 설치하세요.
  2. 먼저 다운로드 받는 WAR 파일을 톰캣의 webapps 폴더(${TOMCAT_HOME}/webapps)에 저장합니다. 만약 nGrinder 를 컨텍스트 경로(http://localhost/ngrinder-controller-3.3와 같이)가 없이 바로 http://localhost 와 같은 형태로 접근하고자 한다면 WAR 파일명을 ROOT.war로 변경하세요.
  3. 그 다음에 ${TOMCAT_HOME}/bin/catalina.sh(리눅스) / ${TOMCAT_HOME}/catalina.bat(윈도우) 파일을 열어서 제일 앞 부분에 다음과 같이 메모리 설정을 넣습니다.
    JAVA_OPTS="-Xms600m -Xmx1024m -XX:MaxPermSize=200m"    # for catalina.sh
    set JAVA_OPTS=-Xms600m -Xmx1024m -XX:MaxPermSize=200m   # for catalina.bat
  4. 그 다음에 ${TOMCAT_HOME}/startup.sh(리눅스) 또는 ${TOMCAT_HOME}/startup.bat 파일을 실행하세요.
  5. 브라우저를 열고 http://localhost:8080/ngrinder-controller-X.X 를 방문하시거나, WAR 파일을 ROOT.war 로 변경하였다면 http://localhost:8080 로 접근해 봅니다.

추가 정보

  • nGrinder 는 다수개의 컨트롤러를 묶어 한 개의 nGrinder 인스턴스 처럼 동작하게 하는 클러스터 모드라는 것을 제공합니다. 각 컨트롤러는 특정 지역(네트워크 구간)의 테스트를 담당합니다. 클러스터 모드로 컨트롤러가 묶기게 되면, 어느 컨트롤러의 인터페이스로 테스트를 진행하더라도 해당하는 지역을 담당하는 컨트롤러가 자동적으로 실행됩니다. 이에 대해서는 컨트롤러 클러스터링 가이드를 참고하시기 바랍니다.
  • 각 설치하는 조직의 요구에 따라 nGrinder를 다양하게 커스터마이징 할 수도 있습니다. 이에 대해서는 컨트롤러 설정 가이드를 참고하시기 바랍니다.

에이전트 설치하기

기존 nGrinder 버전에서는 nGrinder 에이전트 패키지를 sourceforge 에서 별도로 다운받아 설치하여야만 했습니다. 그러나 nGrinder 3.3 부터는  컨트롤러에서 에이전트 패키지를 직접 다운로드 하는 방법으로 바뀌었습니다. 컨트롤러에서 다운로드 되기 때문에, 여러 가지가 가능하게 되었는데, 그 중 으뜸은 에이전트 패키지에 해당 컨트롤러에 접속하는 방법이 미리 설정되어 제공되는 겁니다. 따라서 무설정 에이전트 설치가 가능해 졌습니다.

  1. 먼저 컨트롤러로 로그인 합니다. 디폴트 admin 유저의 패스워드는 admin 입니다.
    image
  2. 우상 측의 메뉴를 클릭하여 “에이전트 다운로드” 메뉴를 선택하세요.
    image

    admin 유저로 로그인하면, 전체 사용자가 공유할 수 있는 에이전트가 다운됩니다. 만약 admin 유저가 아닌 일반 유저로 로그인 하였을 경우에는 “전용 에이전트 다운로드”라는 메뉴가 보입니다. 이 메뉴로 에이전트를 다운로드 하면 현재 사용자만 사용할 수 있는 전용 에이전트 설정이 담긴 에이전트가 다운됩니다. 자세한 사항은 전용 에이전트 항목을 참조하세요.
    만약 리눅스 서버에서 wget 등으로 에이전트를 직접 다운로드 하고 싶다면, wget에 해당 메뉴의 링크를 넣으시면 됩니다. 링크는 현재 nGrinder를 어떻게 설정하였는 지에 따라 조금씩 바뀌니 항상 해당 메뉴의 링크를 복사해서 다운로드 하세요.
    예: wget http://ngrinder.com/agent/download
    다운로드된 에이전트 팩키지는 다운로드 URL 의 호스트명을 사용하여 접속하도록 설정되어 있습니다.(위의 경우에 에이전트는 ngrinder.com 으로 접속하도록 되어 있습니다.) 그런데 어떤 경우에는 다른 해당 컨트롤러의 다른 IP를 통해 접속하고자 하는 경우가 있을 겁니다. 이때는 다음과 같이 다운로드 하셔야 합니다.
    예: wget http://10.10.10.10/agent/download
    그러면 10.10.10.10 으로 접근하도록 미리 설정된 에이전트가 자동으로 다운됩니다.
  3. 그러면 에이전트가 담긴 tar 파일이 다운로드 됩니다. tar 파일은 윈도우에서는 7zip으로 압축 해제 가능하고, 리눅스에서는 tar xvf tar_file.tar 명령어로 해제 가능합니다.
  4. tar 파일을 압축 해제하고, 해제된 폴더로 이동하여 run_agent.sh(리눅스) 또는 run_agent.bat 파일을 실행합니다. 그러면 에이전트는 다음과 같은 절차를 통해 실행됩니다.
    1. ${user.home}/.ngrinder_agent 폴더와 해당 폴더 내에 agent.conf 파일이 있는지 확인합니다.
    2. 만약 해당 파일이 없다면 에이전트 설치 파일 내에 있는 __agent.conf(설정 파일입니다.) 파일을 ${user.home}/.ngrinder_agent 폴더로 복사합니다.
    3. 만약 해당 파일이 이미 있다면, 복사하지 않고 기존의 설정 파일을 사용하여 실행합니다.
  5. 만약 기존 설정 파일(${user.home}/.ngrinder_agent/agent.conf)을 최신 설정 파일(__agent.conf)로 덮어쓰기 하고 싶다면,  에이전트 실행 시 –o 옵션을 주면 됩니다.
    run_agent.sh -o # for linux / mac
    run_agent_bg.sh -o # If you want to run it in the background for linux / macor 
    
    run_agent.bat –o # for windows
  6. 에이전트를 정지하고 싶다면 다음 명령어를 실행하세요.
    stop_agent.sh # for linux / mac 
    
    stop_agent.bat # for windows
  7. nGrinder 3.3 부터는 에이전트가 컨트롤러에 연결시 자동으로 사용가능 하도록 승인 처리됩니다. 그러나 만약 어뷰징을 막기 위해, 반드시 어드민이 승인해야지만 해당 에이전트를 사용 가능하게 하고 싶다면, nGrinder 의 시스템 설정을 열어 다음 설정을 부여해 줘야 합니다.
    controller.enable_agent_auto_approval=false
  8. 에이전트를 승인하기 위해서는 에이전트 관리 페이지로 들어가서 우측의 “승인됨 버튼을 눌러 주세요.
    image
  9. 만약 현재 리눅스를 사용 중에 있다면, 에이전트가 많은 쓰레드를 실행할 수 있게 하기 위해 리눅스 설정을 조금 변경해 줘야 합니다. 먼저 ulimit –a 명령을 실행하여 현재 리눅스의 설정을 살펴봅니다.
    > ulimit -a                                                                                                                                         
    core file size          (blocks, -c) 0
    data seg size           (kbytes, -d) unlimited
    scheduling priority             (-e) 0
    file size               (blocks, -f) unlimited
    pending signals                 (-i) 30676
    max locked memory       (kbytes, -l) 64
    max memory size         (kbytes, -m) unlimited
    open files                      (-n) 16000
    pipe size            (512 bytes, -p) 8
    POSIX message queues     (bytes, -q) 819200
    real-time priority              (-r) 0
    stack size              (kbytes, -s) 10240
    cpu time               (seconds, -t) unlimited
    max user processes              (-u) 32768
    virtual memory          (kbytes, -v) unlimited
    file locks                      (-x) unlimited
  10. 위 설정사항 중에 특히 주의해서 봐야 할 설정은 max user processes 와 open files 입니다. 만약 두 값이 10000 이하라면, 루트 권한으로 /etc/security/limits.conf  를 열어 다음과 같이 편집해 줘야 합니다.
    your_account soft    nproc           32768
    your_account hard    nproc           32768
    root         soft    nproc           32768
    root         hard    nproc           32768
    your_account soft    nofile          16000
    your_account hard    nofile          16000
    root         soft    nofile          16000
    root         hard    nofile          16000
  11. 별다른 설정이 없다면 한 개의 머신 에는 단 한 개의 에이전트만이 설치 가능합니다. 그러나 간혼 한 개의 머신에 여러 에이전트를 설치하여야만 하는 경우도 있습니다. 만약 이런 요구사항이 있다면 에이전트 설정 가이드를 참고하시기 바랍니다.

모니터 설치하기

nGrinder 모니터는 테스트 타겟 서버에 설치하여, 성능 테스트 중 해당 서버의 시스템 상태(CPU 사용률, 메모리 사용률, 네트워크 사용율)을 측정할 때 사용하는 어플리케이션 입니다. 에이전트와 마찬가지로 컨트롤러에서 다운로드 가능합니다.

  1. 우상측의 메뉴를 클릭하여 모니터를 다운로드 합니다.
    image
  2. 다운된 모니터 패키지의 압축을 푼 다음에 다음 명령어를 실행합니다.
    run_monitor_bg.sh  # for linux / mac 
    run_monitor.bat # for windows
  3. 만약 모니터를 종료하고자 한다면 다음 명령어를 실행하세요.
    stop_monitor.sh   # for linux / mac
    stop_monitor.bat  # for windows

자 이제 설치가 끝나서 성능 테스트를 실행할 수 있습니다. 빨리 사용하기 를 참조하세요~

신고
Posted by 윤준호
크리에이티브 커먼즈 라이선스
Creative Commons License

제가 보통 외부에 3시간 정도로 긴 시간동안 ngrinder 소개할일이 있을 때 사용하는 자료를 공개합니다.


http://www.slideshare.net/junhoyoon3994


사실 보통 세미나에서 발표할 때 사용하는 1시간은 ngrinder 가 뭐고 어떤건지 정도 알아보는 시간밖에 않되는데요..


3시간쯤 세미나를 진행하여야, 혼란 없이 ngrinder 를 사용하여 unlimited 한 테스트를 수행하실 수 있습니다.


자료는 향후에도 조끔 더 보강될 겁니다. 소켓 테스트 같은 것을 추가할 예정입니다.

저작자 표시
신고
Posted by 윤준호
크리에이티브 커먼즈 라이선스
Creative Commons License

3.2.3 버전부터 nGrinder 는 스크립트에 파라미터를 전달할 수 있습니다.

image

테스트 설정 화면에는 Paramer 라는 입력 필드가 있는데, 여기에 스크립트에 전달할 파라미터를 넣게 되면, 스크립트에서 System.getProperty(“param”)이라는 명령으로 테스트에서 전달한 파라미터를 받아올 수 있습니다. 파라미터는 1~30 사이즈의 알파벳, 숫자, 언더바와 쉼표로만 구성할 수 있으며, 중간에 스페이스를 넣을 수는 없습니다.

스크립트에서 System.getProperty(“param”) 이라고 입력하게 되면, 테스트 설정화면에서 지정한 파라미터를 스트링 형태로 얻어올 수 있습니다. 이를 boolean 이나 integer 타입으로 변환하여야 한다면 스크립트에 직접 수행하여야 합니다. 그러나 스크립트 검증(Script Validation)을 수행할 때는 해당 스크립트가 어떤 테스트와 바인딩 된 상황이 아니기 때문에 널 값이 리턴됩니다. 따라서 이 문제를 회피하기 위해서는 System.getProperty(“param”, “defaultValue”) 와 같이 default 로 리턴될 값을 항상 지정해 주어야 합니다.

만약 ngrinder groovy 를 사용 중이고, 3.2.3 버전 이상의 ngrinder-groovy maven dependency를 갖도록 pom.xml 을 설정해 두셨다면 좀 더 편리한 유틸리티 클래스를 사용할 수 있습니다.

net.grinder.util.GrinderUtils 클래스는 다음과 같은 스태틱 메소드를 가지고 있습니다.

  • getParam()
  • getParam(defaultValue)
  • getParamInt()
  • getParamLong()
  • getParamFloat()
  • getParamDouble()
  • getParamBoolean()

이 메소드들은 System.getProperty(“param”)을 수행한 뒤에 필요한 지정한 타입으로 컨버팅을 수행합니다. 따라서 만약 나는 항상 숫자를 파라미터로 지정할 요량이면, GrinderUtils.getParamInt() 라고 호출하시면 Integer 형의 파라미터를 리턴해 줍니다. 단 스크립트 검증 단계에서는 0이 리턴됩니다.


// 아래 코드는 파라미터가 주어지지 않거나 0으로 호출될 때는 
// http://naver.com/helloworld 를 호출하고
// 1이 주어질 때는 http://naver.com/helloworld1 을 호출합니다.
def hello = GrinderUtils.getParamInt()
if (hello == 0) {
    HTTPResponse result = request.GET("http://naver.com/helloworld")
} else if (hello == 1) {
    HTTPResponse result = request.GET("http://naver.com/helloworld1")
}

파이선의 경우 이 클래스가 존재하지 않기 때문에 어쩔 수 없이 System.getProperty(“param”, “defaultValue”) 파라미터를 가져와서 직접 컨버팅 해야 합니다.

그리고 파라미터를 여러 개 전달해 줘야 하는 경우에는 어떻게 할까요? 다행히도 파라미터 스트링 내에 , 를 포함할 수 있으로, 파라미터를 스트링으로 가져온 후에 , 를 기준으로 Split 해서 직접 컨버팅 해야 합니다. 좀 복잡할 수 있습니다만 그닥 어렵진 않으므로 한번 처리해 보시기 바랍니다.

신고
Posted by 윤준호


티스토리 툴바