SlideShare a Scribd company logo
Content


오픈소스/무료 툴을 활용한                               1. 동기 - 부하/성능테스트
                                             2. 성능/부하 툴 소개

부하/성능 테스트 사례소개                               3. 설치 가이드
                                             4. 활용 가이드
                                             5. 병목 발견 및 조치
                                             6. 여러가지 함정들
                                             7. 활용 팁
2013. 3. 16



소         속 K   S       U   G
발    표    자 임       성       현
발    표    자 이       경       환




개발자를 위한 공감세미나 11회-오픈 소스/무료 툴을 활용한 성능/부하테스트
발표자

 * 임성현
     - 스펙트라에서 근무중
       (차세대 제품개발/Quality Eng.)
     - 전 삼성SDS 품질 툴 개발 및 지원
     - 자바개발 14년차
     - 전자계산조직응용 기술사
     - IT멘토링(한이음/WoC등)
     - 정보화역기능 명예강사(소년원)


                                             * 이경환
                                              - 스펙트라에서 근무중
                                              - 자바개발 5년차
                                              - 차세대 제품개발
                                              - 개발표준 / Continuous Integration 자동화
                                              - 스프링 기반 단위/ 통합/ 성능 테스트 담당




개발자를 위한 공감세미나 11회-오픈 소스/무료 툴을 활용한 성능/부하테스트
1. 동기

 오픈소스/무료 성능 툴이 필요한 이유
  - 좀 더 빠른 시점에 => 개발 시점에

  - 개발자가 직접 => 자신이 작성한 소스를

  - 부담 없이 => 비용 부담 없이, 설치 부담 없이(설치가 정말 쉽다!)

  - 성능을 고려한 실험을 할 수 있도록 => 이렇게 하면 더 빨라질까?



 아래의 질문을 해결해봅시다!
   - Filter를 사용하면 얼마나 성능이 떨어질까요?

   - 커넥션 풀 세팅을 변경하면 얼마나 빨라지나요?

   - 보안 라이브러리를 교체하면 얼마나 느려지나요?

   - 데이터가 100만 건이 넘으면 조회가 느리다는데 어디가 문제일까요?


개발자를 위한 공감세미나 11회-오픈 소스/무료 툴을 활용한 성능/부하테스트
2. 성능/부하 툴 소개

 부하 툴 : nGrinder(http://www.nhnopensource.org/ngrinder/)




 자세한 설명은
 http://prezi.com/sv1xtz75ybaq/ngrinder/
 http://ngrinder.642.n7.nabble.com/ngrinder-user-kr-f113.html

개발자를 위한 공감세미나 11회-오픈 소스/무료 툴을 활용한 성능/부하테스트
2. 성능/부하 툴 소개

                                             nGrinder 구성
                                             - nGrinder controller
                                             - Agent




                                             이미지 출처:
                                             http://www.cubrid.org
                                             /wiki_ngrinder/entry/g
                                             eneral-architecture



개발자를 위한 공감세미나 11회-오픈 소스/무료 툴을 활용한 성능/부하테스트
2. 성능/부하 툴 소개

                                             성능 툴:
                                             AppDynamics lite
                                             http://www.appdynamics.c
                                             om/


                                             참고 사이트
                                             http://litedocs.appdynami
                                             cs.com/display/ADLite/Ge
                                             t+Started+With+AppDyna
                                             mics+Lite+for+Java




개발자를 위한 공감세미나 11회-오픈 소스/무료 툴을 활용한 성능/부하테스트
2. 성능/부하 툴 소개

                                             AppDynamics
                                             지원 사양




개발자를 위한 공감세미나 11회-오픈 소스/무료 툴을 활용한 성능/부하테스트
2. 성능/부하 툴 소개

                                             성능 툴: New Relic
                                             http://newrelic.com/

                                             참고 사이트
                                             https://newrelic.com/
                                             docs/help




개발자를 위한 공감세미나 11회-오픈 소스/무료 툴을 활용한 성능/부하테스트
2. 성능/부하 툴 소개

                                             New Relic 지원사양




개발자를 위한 공감세미나 11회-오픈 소스/무료 툴을 활용한 성능/부하테스트
2. 성능/부하 툴 소개

                                             성능 툴: VisualVM
                                             http://visualvm.java.net

                                             참고 사이트
                                             http://visualvm.java.net/ko_K
                                             R/gettingstarted.html




개발자를 위한 공감세미나 11회-오픈 소스/무료 툴을 활용한 성능/부하테스트
2. 성능/부하 툴 소개

                                             성능 툴: Eclipse Memory
                                             Analyzer
                                             http://www.eclipse.org/mat/d
                                             ownloads.php




개발자를 위한 공감세미나 11회-오픈 소스/무료 툴을 활용한 성능/부하테스트
3. 설치 가이드 - overview
                                             System Under Test




                       Agent
                        Agent
                         Script

                                                                   모니터링
      시나리오

                                                      Egov…..
                                                      WAS 서버
                         Agent
                          Agent
                           Agent




                                                        DB 서버
                                                        Oracle




      부하 테스트(Stress test)                                성능 모니터링

개발자를 위한 공감세미나 11회-오픈 소스/무료 툴을 활용한 성능/부하테스트
3. 설치 가이드

  1) nGrinder : http://sourceforge.net/projects/ngrinder/files/
       참조: http://junoyoon.tistory.com/entry/nGrinder-
       %EC%84%A4%EC%B9%98%EB%B0%A9%EB%B2%95
  2) AppDynamics : http://www.appdynamics.com/curious-about-
      pricing
  3) New Relic : 회원가입 후 License Key, Agent 다운로드




개발자를 위한 공감세미나 11회-오픈 소스/무료 툴을 활용한 성능/부하테스트
3. 설치 가이드 - nGrinder




                                             실행 후




개발자를 위한 공감세미나 11회-오픈 소스/무료 툴을 활용한 성능/부하테스트
3. 설치 가이드 - AppDynamics




개발자를 위한 공감세미나 11회-오픈 소스/무료 툴을 활용한 성능/부하테스트
3. 설치 가이드 - New Relic




개발자를 위한 공감세미나 11회-오픈 소스/무료 툴을 활용한 성능/부하테스트
3. 설치 가이드 - 테스트 대상 환경 구성

 1. Windows 7 / Tomcat 6.0.36 / Oracle 11g XE / Java 1.6.0_35
 2. 테스트 대상 web application 구성
     전자정부프레임워크 의사소통관리 2.0
     http://www.egovframe.org/cop/bbs/selectBoardArticle.do?nttId=444&bbsId=BBSMSTR
     _000000000121&menu=2&submenu=3 (oe1.war로 변환 후 구동)




개발자를 위한 공감세미나 11회-오픈 소스/무료 툴을 활용한 성능/부하테스트
3. 설치 가이드 - 테스트 대상 환경 구성

     http://sleeplessinslc.blogspot.kr/2012/02/spring-security-stateless-cookie-based.html




개발자를 위한 공감세미나 11회-오픈 소스/무료 툴을 활용한 성능/부하테스트
3. 설치 가이드 - Port 정리

 Port 정리
 <수정 필요>
 1. 테스트 대상 서버(SUT) /conf/web.xml :
     shutdown port=8885
     service port=8888
     ajp port=8889
 2. nGrinder controller /conf/web.xml :
     shutdown port=18005
     service port=18080
     ajp port=18009

 <수정 안함>
 3. nGrinder Agent user/.nGrinder_agent/agent.conf
    controller port=16001
 4. AppDynamics viewer
    adlite-view port=8990
 5. The Grinder
    TCPProxy port=8001
 6. SpringSecurity Example
    jetty port=8080


개발자를 위한 공감세미나 11회-오픈 소스/무료 툴을 활용한 성능/부하테스트
3. 설치 가이드 - 모니터링/ TCPProxy 준비

 1. 모니터링
    _DEV_/SUT/apache-tomcat-6.0.36/bin/catalina.bat 수정
   javaagent 옵션 활용




 2. 레코딩
    _DEV_/tcpproxy.bat 파일 생성




개발자를 위한 공감세미나 11회-오픈 소스/무료 툴을 활용한 성능/부하테스트
3. 설치 가이드 - egov 셈플 수정


 동시접속자 제한을 제거
 - context-security.xml 파일 128라인 주석화




개발자를 위한 공감세미나 11회-오픈 소스/무료 툴을 활용한 성능/부하테스트
4. 활용 가이드

 < 다음사항을 알아보겠습니다. >

 1) nGrinder Basic - JYTHON!!!

 2) 저장된 스크립트 구동

 3) Record & Play (jython의 장벽을 넘을 수 있는 막강 도구)

 4) Session 처리

 5) POST 방식

 6) JSON 처리

 7) 시퀀스

 8) Doc 생성




개발자를 위한 공감세미나 11회-오픈 소스/무료 툴을 활용한 성능/부하테스트
4. 활용 가이드

 1) nGrinder Basic - JYTHON!!!(java만 알면 까막눈)




개발자를 위한 공감세미나 11회-오픈 소스/무료 툴을 활용한 성능/부하테스트
4. 활용 가이드

 2) 저장된 스크립트 구동
 3) Record & Play(jython의 장벽을 넘을 수 있는 막강 도구)
  - tcpproxy.bat 수행




개발자를 위한 공감세미나 11회-오픈 소스/무료 툴을 활용한 성능/부하테스트
4. 활용 가이드

  - 브라우저 proxy 설정




개발자를 위한 공감세미나 11회-오픈 소스/무료 툴을 활용한 성능/부하테스트
4. 활용 가이드

 4) Session 처리 – nGrinder에서 기본 제공
 5) POST 방식




 6) JSON 처리 – 스크립트 만들 때 라이브러리/리소스 폴더 생성 후 json라이브러리 업로드




개발자를 위한 공감세미나 11회-오픈 소스/무료 툴을 활용한 성능/부하테스트
4. 활용 가이드

 7) 시퀀스 – 동일한 USER ID를 막는다면? -> python의 글로벌 변수 활용
 8) Doc 생성 – groc 활용(http://blog.outsider.ne.kr/907)




개발자를 위한 공감세미나 11회-오픈 소스/무료 툴을 활용한 성능/부하테스트
5. 병목발견 및 조치

 <다음 사항을 알아보겠습니다>

 1. 성능 측정과 함께 모니터링 해야 할 것

 2. 성능 측정 후에 모니터링 해야 할 것

 3. WAS가 죽거나 멈췄을 때 확인해야 할 것




개발자를 위한 공감세미나 11회-오픈 소스/무료 툴을 활용한 성능/부하테스트
5. 병목발견 및 조치

 * 성능 측정과 함께 모니터링 해야 할 것
 1) WAS 성능 모니터링




개발자를 위한 공감세미나 11회-오픈 소스/무료 툴을 활용한 성능/부하테스트
5. 병목발견 및 조치




개발자를 위한 공감세미나 11회-오픈 소스/무료 툴을 활용한 성능/부하테스트
5. 병목발견 및 조치

 * 성능 측정과 함께 모니터링 해야 할 것
 2) WAS의 thread 모니터링. (부하가 잘 들어가고 있는지 알 수 있습니다.)




개발자를 위한 공감세미나 11회-오픈 소스/무료 툴을 활용한 성능/부하테스트
5. 병목발견 및 조치

 * 성능 측정과 함께 모니터링 해야 할 것
 3) SUT(대상시스템) 과 연계시스템 (DB, WebService 등)의 resource 확인
   CPU , MEMORY, DISK, NETWORK




개발자를 위한 공감세미나 11회-오픈 소스/무료 툴을 활용한 성능/부하테스트
5. 병목발견 및 조치

 * 성능 측정과 함께 모니터링 해야 할 것
 4) visualvm의 sampling 플러그인을 사용하여 java method별 병목 파악.




개발자를 위한 공감세미나 11회-오픈 소스/무료 툴을 활용한 성능/부하테스트
5. 병목발견 및 조치

 * 성능 측정과 함께 모니터링 해야 할 것
   snapshot을 보면 세부적인 callstack과 시간을 볼 수 있습니다.




개발자를 위한 공감세미나 11회-오픈 소스/무료 툴을 활용한 성능/부하테스트
5. 병목발견 및 조치

 2. 성능 측정 후에 모니터링 해야 할 것

 1) Test 데이터 확인.

   등록건수/조회건수 등에 대해서 정확하게 변경되었는지 확인.

   동시접속 제한 등으로 미실행건이 있는지 확인

    => Logic이 수행되지 않았기 때문에 TPS가 과다 산정



 2) Error 확인

   에러 로그를 확인, 에러를 전부 제거한 뒤에 다시 부하테스트 시도




개발자를 위한 공감세미나 11회-오픈 소스/무료 툴을 활용한 성능/부하테스트
5. 병목발견 및 조치

 3. WAS가 죽거나 멈췄을 때 확인해야 할 것
 1) SYSTEM log를 확인(WAS가 어떤이유로 죽었는지.)

 2) visualvm으로 memory, gc 를 확인.
  (GC가 짧은간격 호출되고 호출 이후에도 메모리가

      내려가지 않고 높다면 메모리가 부족한것.)

 3) memory leak은 visualvm으로

    heap dump를 받아서 확인한다.
   -Xmx 가 너무 적게 잡으면 발생

   -Xmx 가 너무 크면 시스템이 리소스를 독점하고,

    full GC에 많은 시간이 걸려 오히려 역효과




개발자를 위한 공감세미나 11회-오픈 소스/무료 툴을 활용한 성능/부하테스트
5. 병목발견 및 조치

 3. WAS가 죽거나 멈췄을 때 확인해야 할 것
   Memory Analyzer(MAT)




개발자를 위한 공감세미나 11회-오픈 소스/무료 툴을 활용한 성능/부하테스트
6. 여러가지 함정들
 1. [nGrinder]windows xp에서 agent를 설치하는 사용자의 함정
  Default : C:Docment and Settingsuser.ngrinder_agent 경로에 " "가 들어가면 실행시 에러 발생.
  해결 방안:
     AGENT 사용시           - NGRINDER_AGENT_HOME=c:ngrinderagent_home
     CONTROLLER 사용시 - NGRINDER_HOME=c:ngrindercontroller_home
     TOMCAT 사용시           - CATALINA_HOME=c:ngrindercontroller



 2. [AppDynamics]
 구동되면서 OOM permgen space exception 발생할 수 있음.
  해결 방안:
    -XX:MaxPermSize=128m permgen영역을 조금 더 여유 있게 설정


 3. [SUT]dbpool이 함정.
  DB pool은 느리지 않습니다. DB에서 처리하는 시간이 늘어나면서 pool이 부족해 질 수 있습니다.
  DB pool 관련 method의 처리시간이 길어지고 pool에 반환하지 못하면서 대기시간이 길어집니다.
  DB pool 설정을 무작정 늘리는 것은 좋지 않다.
  아래의 설정은 DB pool 역할을 못한다.

   <property name="initialSize" value="0"/>
   <property name="maxActive" value="8"/>
   <property name="maxIdle" value="0"/>  DB Pool 을 사용하지 않는 것과 같다.



개발자를 위한 공감세미나 11회-오픈 소스/무료 툴을 활용한 성능/부하테스트
7. 활용 팁
 1. [SUT]실행 에러를 없애고 테스트 수행할 것
   - error있는 소스가 tps나 응답시간이 외곡될 수 있다. 에러처리가 우선!!(TPS/응답시간만 보고 성능이 개선되었다고 착각)

   - grinder.statistics.forLastTest.setSuccess(False) 처리시 많은 에러가 나면 테스트가 중간 종료됨



 2. [nGrinder]시나리오는 심플하게
   - 스크립트 만들기도 어렵고, 에러 수정하기도 어렵다.

   - 시나리오가 복잡하면 평균 TPS를 통해 어디가 병목인지 확인이 어렵다.



 3. [nGrinder] 실행 우선, 서서히 다듬기.
   - 먼저 잘 실행되는 스크립트를 만들고 모니터링 하면서 개선한다.



 4. [SUT]시스템의 이해가 필요.
   - 로그인 중복 방지 경우(user+timestamp로 로그를 남기는 경우 동시에 로그인하면 키중복 에러)

   - 동일 사용자의 경우 조회수가 변동되지 않는 경우

   - spring security의 session, 동시사용자 제한등을 풀어야 제대로 부하를 주는 테스트를 할 수 있다.



 5. [전략]테스트 구동 서버, agent, 모니터링 서버 확보
   - 동일 서버에서 구동시 과도 부하 발생

개발자를 위한 공감세미나 11회-오픈 소스/무료 툴을 활용한 성능/부하테스트
7. 활용 팁
 6. [전략]DB를 사용하는 어플리케이션이라면 DB튜닝과 함께 병행 준비
   - 성능저하 포인트는 결국 DB에서 만나게 된다.



 7. [nGrinder]script 검증과 부하테스트 환경의 차이 감안(Agent의 127.0.0.1 상황)
   - SUT에 대한 부하는 nGrinder Agent에서 주기 때문에 원격서버에 설치된 경우 방화벽 설정에 주의

   - script의 검증은 nGrinder controller에서 수행하고 실제 부하 테스트 시에는 nGrinder Agent에서 접근함.



 8. [nGrinder]Script Gallery를 꼭 구경하자.
  - nGrinder의 모체인 The Grinder가 어떤 기능을 제공하는지 파악 가능 http://grinder.sourceforge.net/g3/script-gallery.html#form.py



 9. [전략]적정 시간 이상 테스트를 수행한 뒤 측정
  - 30분이상 부하를 준뒤 성능을 수치를 측정하는것이 좋습니다.

  - 따라서, 시간이 많이 소요되는 테스트!!(야근주의)



 10. [SUT]동일한 환경에 기술요소를 다르게 하여 성능개선 포인트 확보 가능
  - tomcat의 connector 를 APR로 바꿨을때

  - apache와 nginex의 비교.

  - 커넥션 풀을 Apache DBCP를 boneCP로 바꿨을때.


개발자를 위한 공감세미나 11회-오픈 소스/무료 툴을 활용한 성능/부하테스트
7. 활용 팁

 11. [전략]오픈소스 개발자에게 감사를 표시하자
   - http://ngrinder.642.n7.nabble.com/ngrinder-user-kr-f113.html




개발자를 위한 공감세미나 11회-오픈 소스/무료 툴을 활용한 성능/부하테스트
감사합니다.

     임성현 : sunghyun.lim@gmail.com
     이경환 : khlee03@gmail.com




개발자를 위한 공감세미나 11회-오픈 소스/무료 툴을 활용한 성능/부하테스트

More Related Content

PDF
111 n grinder-deview_day1_track1_session_1_ver_2
PPTX
practical perf testing - d2startup
PDF
내가써본 nGrinder-SpringCamp 2015
PPTX
Advanced nGrinder
PPTX
Performance Testing using Loadrunner
PPTX
Advanced nGrinder 2nd Edition
PPTX
오픈 소스 도구를 활용한 성능 테스트 방법 및 사례
PDF
[Hello world 오픈세미나]n grinder helloworld발표자료_저작권free
111 n grinder-deview_day1_track1_session_1_ver_2
practical perf testing - d2startup
내가써본 nGrinder-SpringCamp 2015
Advanced nGrinder
Performance Testing using Loadrunner
Advanced nGrinder 2nd Edition
오픈 소스 도구를 활용한 성능 테스트 방법 및 사례
[Hello world 오픈세미나]n grinder helloworld발표자료_저작권free

What's hot (20)

PPTX
Nginx Testing in NAVER
PPTX
PDF
JMeter
PDF
솔루션 구축 사례를 통해 본 SW아키텍처
PDF
Performance test
PDF
오픈소스 성능 최적화 보고서 ch07. Infinispan
PDF
Apache JMeter로 웹 성능 테스트 방법
PDF
[오픈소스컨설팅]Java Performance Tuning
PDF
Performance test using_j_meter_ver1.2
PDF
초보 개발자/학생들을 위한 오픈소스 트랜드
PDF
모바일 게임 테스트 자동화 (Appium 확장)
PPTX
Ahea Team Spring batch
PDF
지속적인 통합
PDF
DevOps 시대가 요구하는 품질확보 방법
PDF
대용량아키텍처와성능튜닝 8장성능엔지니어링정의와범위
PPTX
SonarQube 로 Unity 프로젝트 관리
PPTX
Jenkins를 활용한 javascript 개발
PDF
모바일 앱 성능 분석 방법 101 (Mobile Application Performance Analysis Methodology 101)
PDF
Online service 계층별 성능 모니터링 방안
PDF
필요해서 하는 개발 자동화
Nginx Testing in NAVER
JMeter
솔루션 구축 사례를 통해 본 SW아키텍처
Performance test
오픈소스 성능 최적화 보고서 ch07. Infinispan
Apache JMeter로 웹 성능 테스트 방법
[오픈소스컨설팅]Java Performance Tuning
Performance test using_j_meter_ver1.2
초보 개발자/학생들을 위한 오픈소스 트랜드
모바일 게임 테스트 자동화 (Appium 확장)
Ahea Team Spring batch
지속적인 통합
DevOps 시대가 요구하는 품질확보 방법
대용량아키텍처와성능튜닝 8장성능엔지니어링정의와범위
SonarQube 로 Unity 프로젝트 관리
Jenkins를 활용한 javascript 개발
모바일 앱 성능 분석 방법 101 (Mobile Application Performance Analysis Methodology 101)
Online service 계층별 성능 모니터링 방안
필요해서 하는 개발 자동화
Ad

Similar to 공감세미나 성능테스트 (20)

PDF
Tdc2013 선배들에게 배우는 server scalability
PDF
[오픈소스컨설팅]이기종 WAS 클러스터링 솔루션- Athena Dolly
PPTX
[경북] I'mcloud openlight
PDF
[MGDC] 리눅스 게임 서버 성능 분석하기 - 아이펀팩토리 김진욱 CTO
PDF
Custom DevOps Monitoring System in MelOn (with InfluxDB + Telegraf + Grafana)
PDF
Monitoring System for DevOps - Case of MelOn
PDF
NRISE 개발스택
PDF
01.개발환경 교육교재
PDF
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
PDF
[OkdevTV] 2024년 9월 2일 개발 이야기
PPTX
Open source engineering - 0.1
PPTX
[H3 2012] 스마트모바일 환경에서의 App.품질관리전략
PDF
IBM 보안솔루션 앱스캔_AppScan Standard 소개
PDF
실전 서버 부하테스트 노하우
PDF
웹서버 부하테스트 실전 노하우
PPTX
OPEN_POWER8_SESSION_20150316
PDF
[2B2]기계 친화성을 중심으로 접근한 최적화 기법
PDF
오픈 소스 사용 매뉴얼
PPTX
regular.express 발표자료
PPTX
Open source engineering
Tdc2013 선배들에게 배우는 server scalability
[오픈소스컨설팅]이기종 WAS 클러스터링 솔루션- Athena Dolly
[경북] I'mcloud openlight
[MGDC] 리눅스 게임 서버 성능 분석하기 - 아이펀팩토리 김진욱 CTO
Custom DevOps Monitoring System in MelOn (with InfluxDB + Telegraf + Grafana)
Monitoring System for DevOps - Case of MelOn
NRISE 개발스택
01.개발환경 교육교재
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
[OkdevTV] 2024년 9월 2일 개발 이야기
Open source engineering - 0.1
[H3 2012] 스마트모바일 환경에서의 App.품질관리전략
IBM 보안솔루션 앱스캔_AppScan Standard 소개
실전 서버 부하테스트 노하우
웹서버 부하테스트 실전 노하우
OPEN_POWER8_SESSION_20150316
[2B2]기계 친화성을 중심으로 접근한 최적화 기법
오픈 소스 사용 매뉴얼
regular.express 발표자료
Open source engineering
Ad

공감세미나 성능테스트

  • 1. Content 오픈소스/무료 툴을 활용한 1. 동기 - 부하/성능테스트 2. 성능/부하 툴 소개 부하/성능 테스트 사례소개 3. 설치 가이드 4. 활용 가이드 5. 병목 발견 및 조치 6. 여러가지 함정들 7. 활용 팁 2013. 3. 16 소 속 K S U G 발 표 자 임 성 현 발 표 자 이 경 환 개발자를 위한 공감세미나 11회-오픈 소스/무료 툴을 활용한 성능/부하테스트
  • 2. 발표자 * 임성현 - 스펙트라에서 근무중 (차세대 제품개발/Quality Eng.) - 전 삼성SDS 품질 툴 개발 및 지원 - 자바개발 14년차 - 전자계산조직응용 기술사 - IT멘토링(한이음/WoC등) - 정보화역기능 명예강사(소년원) * 이경환 - 스펙트라에서 근무중 - 자바개발 5년차 - 차세대 제품개발 - 개발표준 / Continuous Integration 자동화 - 스프링 기반 단위/ 통합/ 성능 테스트 담당 개발자를 위한 공감세미나 11회-오픈 소스/무료 툴을 활용한 성능/부하테스트
  • 3. 1. 동기 오픈소스/무료 성능 툴이 필요한 이유 - 좀 더 빠른 시점에 => 개발 시점에 - 개발자가 직접 => 자신이 작성한 소스를 - 부담 없이 => 비용 부담 없이, 설치 부담 없이(설치가 정말 쉽다!) - 성능을 고려한 실험을 할 수 있도록 => 이렇게 하면 더 빨라질까? 아래의 질문을 해결해봅시다! - Filter를 사용하면 얼마나 성능이 떨어질까요? - 커넥션 풀 세팅을 변경하면 얼마나 빨라지나요? - 보안 라이브러리를 교체하면 얼마나 느려지나요? - 데이터가 100만 건이 넘으면 조회가 느리다는데 어디가 문제일까요? 개발자를 위한 공감세미나 11회-오픈 소스/무료 툴을 활용한 성능/부하테스트
  • 4. 2. 성능/부하 툴 소개 부하 툴 : nGrinder(http://www.nhnopensource.org/ngrinder/) 자세한 설명은 http://prezi.com/sv1xtz75ybaq/ngrinder/ http://ngrinder.642.n7.nabble.com/ngrinder-user-kr-f113.html 개발자를 위한 공감세미나 11회-오픈 소스/무료 툴을 활용한 성능/부하테스트
  • 5. 2. 성능/부하 툴 소개 nGrinder 구성 - nGrinder controller - Agent 이미지 출처: http://www.cubrid.org /wiki_ngrinder/entry/g eneral-architecture 개발자를 위한 공감세미나 11회-오픈 소스/무료 툴을 활용한 성능/부하테스트
  • 6. 2. 성능/부하 툴 소개 성능 툴: AppDynamics lite http://www.appdynamics.c om/ 참고 사이트 http://litedocs.appdynami cs.com/display/ADLite/Ge t+Started+With+AppDyna mics+Lite+for+Java 개발자를 위한 공감세미나 11회-오픈 소스/무료 툴을 활용한 성능/부하테스트
  • 7. 2. 성능/부하 툴 소개 AppDynamics 지원 사양 개발자를 위한 공감세미나 11회-오픈 소스/무료 툴을 활용한 성능/부하테스트
  • 8. 2. 성능/부하 툴 소개 성능 툴: New Relic http://newrelic.com/ 참고 사이트 https://newrelic.com/ docs/help 개발자를 위한 공감세미나 11회-오픈 소스/무료 툴을 활용한 성능/부하테스트
  • 9. 2. 성능/부하 툴 소개 New Relic 지원사양 개발자를 위한 공감세미나 11회-오픈 소스/무료 툴을 활용한 성능/부하테스트
  • 10. 2. 성능/부하 툴 소개 성능 툴: VisualVM http://visualvm.java.net 참고 사이트 http://visualvm.java.net/ko_K R/gettingstarted.html 개발자를 위한 공감세미나 11회-오픈 소스/무료 툴을 활용한 성능/부하테스트
  • 11. 2. 성능/부하 툴 소개 성능 툴: Eclipse Memory Analyzer http://www.eclipse.org/mat/d ownloads.php 개발자를 위한 공감세미나 11회-오픈 소스/무료 툴을 활용한 성능/부하테스트
  • 12. 3. 설치 가이드 - overview System Under Test Agent Agent Script 모니터링 시나리오 Egov….. WAS 서버 Agent Agent Agent DB 서버 Oracle 부하 테스트(Stress test) 성능 모니터링 개발자를 위한 공감세미나 11회-오픈 소스/무료 툴을 활용한 성능/부하테스트
  • 13. 3. 설치 가이드 1) nGrinder : http://sourceforge.net/projects/ngrinder/files/ 참조: http://junoyoon.tistory.com/entry/nGrinder- %EC%84%A4%EC%B9%98%EB%B0%A9%EB%B2%95 2) AppDynamics : http://www.appdynamics.com/curious-about- pricing 3) New Relic : 회원가입 후 License Key, Agent 다운로드 개발자를 위한 공감세미나 11회-오픈 소스/무료 툴을 활용한 성능/부하테스트
  • 14. 3. 설치 가이드 - nGrinder 실행 후 개발자를 위한 공감세미나 11회-오픈 소스/무료 툴을 활용한 성능/부하테스트
  • 15. 3. 설치 가이드 - AppDynamics 개발자를 위한 공감세미나 11회-오픈 소스/무료 툴을 활용한 성능/부하테스트
  • 16. 3. 설치 가이드 - New Relic 개발자를 위한 공감세미나 11회-오픈 소스/무료 툴을 활용한 성능/부하테스트
  • 17. 3. 설치 가이드 - 테스트 대상 환경 구성 1. Windows 7 / Tomcat 6.0.36 / Oracle 11g XE / Java 1.6.0_35 2. 테스트 대상 web application 구성 전자정부프레임워크 의사소통관리 2.0 http://www.egovframe.org/cop/bbs/selectBoardArticle.do?nttId=444&bbsId=BBSMSTR _000000000121&menu=2&submenu=3 (oe1.war로 변환 후 구동) 개발자를 위한 공감세미나 11회-오픈 소스/무료 툴을 활용한 성능/부하테스트
  • 18. 3. 설치 가이드 - 테스트 대상 환경 구성 http://sleeplessinslc.blogspot.kr/2012/02/spring-security-stateless-cookie-based.html 개발자를 위한 공감세미나 11회-오픈 소스/무료 툴을 활용한 성능/부하테스트
  • 19. 3. 설치 가이드 - Port 정리 Port 정리 <수정 필요> 1. 테스트 대상 서버(SUT) /conf/web.xml : shutdown port=8885 service port=8888 ajp port=8889 2. nGrinder controller /conf/web.xml : shutdown port=18005 service port=18080 ajp port=18009 <수정 안함> 3. nGrinder Agent user/.nGrinder_agent/agent.conf controller port=16001 4. AppDynamics viewer adlite-view port=8990 5. The Grinder TCPProxy port=8001 6. SpringSecurity Example jetty port=8080 개발자를 위한 공감세미나 11회-오픈 소스/무료 툴을 활용한 성능/부하테스트
  • 20. 3. 설치 가이드 - 모니터링/ TCPProxy 준비 1. 모니터링 _DEV_/SUT/apache-tomcat-6.0.36/bin/catalina.bat 수정 javaagent 옵션 활용 2. 레코딩 _DEV_/tcpproxy.bat 파일 생성 개발자를 위한 공감세미나 11회-오픈 소스/무료 툴을 활용한 성능/부하테스트
  • 21. 3. 설치 가이드 - egov 셈플 수정 동시접속자 제한을 제거 - context-security.xml 파일 128라인 주석화 개발자를 위한 공감세미나 11회-오픈 소스/무료 툴을 활용한 성능/부하테스트
  • 22. 4. 활용 가이드 < 다음사항을 알아보겠습니다. > 1) nGrinder Basic - JYTHON!!! 2) 저장된 스크립트 구동 3) Record & Play (jython의 장벽을 넘을 수 있는 막강 도구) 4) Session 처리 5) POST 방식 6) JSON 처리 7) 시퀀스 8) Doc 생성 개발자를 위한 공감세미나 11회-오픈 소스/무료 툴을 활용한 성능/부하테스트
  • 23. 4. 활용 가이드 1) nGrinder Basic - JYTHON!!!(java만 알면 까막눈) 개발자를 위한 공감세미나 11회-오픈 소스/무료 툴을 활용한 성능/부하테스트
  • 24. 4. 활용 가이드 2) 저장된 스크립트 구동 3) Record & Play(jython의 장벽을 넘을 수 있는 막강 도구) - tcpproxy.bat 수행 개발자를 위한 공감세미나 11회-오픈 소스/무료 툴을 활용한 성능/부하테스트
  • 25. 4. 활용 가이드 - 브라우저 proxy 설정 개발자를 위한 공감세미나 11회-오픈 소스/무료 툴을 활용한 성능/부하테스트
  • 26. 4. 활용 가이드 4) Session 처리 – nGrinder에서 기본 제공 5) POST 방식 6) JSON 처리 – 스크립트 만들 때 라이브러리/리소스 폴더 생성 후 json라이브러리 업로드 개발자를 위한 공감세미나 11회-오픈 소스/무료 툴을 활용한 성능/부하테스트
  • 27. 4. 활용 가이드 7) 시퀀스 – 동일한 USER ID를 막는다면? -> python의 글로벌 변수 활용 8) Doc 생성 – groc 활용(http://blog.outsider.ne.kr/907) 개발자를 위한 공감세미나 11회-오픈 소스/무료 툴을 활용한 성능/부하테스트
  • 28. 5. 병목발견 및 조치 <다음 사항을 알아보겠습니다> 1. 성능 측정과 함께 모니터링 해야 할 것 2. 성능 측정 후에 모니터링 해야 할 것 3. WAS가 죽거나 멈췄을 때 확인해야 할 것 개발자를 위한 공감세미나 11회-오픈 소스/무료 툴을 활용한 성능/부하테스트
  • 29. 5. 병목발견 및 조치 * 성능 측정과 함께 모니터링 해야 할 것 1) WAS 성능 모니터링 개발자를 위한 공감세미나 11회-오픈 소스/무료 툴을 활용한 성능/부하테스트
  • 30. 5. 병목발견 및 조치 개발자를 위한 공감세미나 11회-오픈 소스/무료 툴을 활용한 성능/부하테스트
  • 31. 5. 병목발견 및 조치 * 성능 측정과 함께 모니터링 해야 할 것 2) WAS의 thread 모니터링. (부하가 잘 들어가고 있는지 알 수 있습니다.) 개발자를 위한 공감세미나 11회-오픈 소스/무료 툴을 활용한 성능/부하테스트
  • 32. 5. 병목발견 및 조치 * 성능 측정과 함께 모니터링 해야 할 것 3) SUT(대상시스템) 과 연계시스템 (DB, WebService 등)의 resource 확인 CPU , MEMORY, DISK, NETWORK 개발자를 위한 공감세미나 11회-오픈 소스/무료 툴을 활용한 성능/부하테스트
  • 33. 5. 병목발견 및 조치 * 성능 측정과 함께 모니터링 해야 할 것 4) visualvm의 sampling 플러그인을 사용하여 java method별 병목 파악. 개발자를 위한 공감세미나 11회-오픈 소스/무료 툴을 활용한 성능/부하테스트
  • 34. 5. 병목발견 및 조치 * 성능 측정과 함께 모니터링 해야 할 것 snapshot을 보면 세부적인 callstack과 시간을 볼 수 있습니다. 개발자를 위한 공감세미나 11회-오픈 소스/무료 툴을 활용한 성능/부하테스트
  • 35. 5. 병목발견 및 조치 2. 성능 측정 후에 모니터링 해야 할 것 1) Test 데이터 확인. 등록건수/조회건수 등에 대해서 정확하게 변경되었는지 확인. 동시접속 제한 등으로 미실행건이 있는지 확인 => Logic이 수행되지 않았기 때문에 TPS가 과다 산정 2) Error 확인 에러 로그를 확인, 에러를 전부 제거한 뒤에 다시 부하테스트 시도 개발자를 위한 공감세미나 11회-오픈 소스/무료 툴을 활용한 성능/부하테스트
  • 36. 5. 병목발견 및 조치 3. WAS가 죽거나 멈췄을 때 확인해야 할 것 1) SYSTEM log를 확인(WAS가 어떤이유로 죽었는지.) 2) visualvm으로 memory, gc 를 확인. (GC가 짧은간격 호출되고 호출 이후에도 메모리가 내려가지 않고 높다면 메모리가 부족한것.) 3) memory leak은 visualvm으로 heap dump를 받아서 확인한다. -Xmx 가 너무 적게 잡으면 발생 -Xmx 가 너무 크면 시스템이 리소스를 독점하고, full GC에 많은 시간이 걸려 오히려 역효과 개발자를 위한 공감세미나 11회-오픈 소스/무료 툴을 활용한 성능/부하테스트
  • 37. 5. 병목발견 및 조치 3. WAS가 죽거나 멈췄을 때 확인해야 할 것 Memory Analyzer(MAT) 개발자를 위한 공감세미나 11회-오픈 소스/무료 툴을 활용한 성능/부하테스트
  • 38. 6. 여러가지 함정들 1. [nGrinder]windows xp에서 agent를 설치하는 사용자의 함정 Default : C:Docment and Settingsuser.ngrinder_agent 경로에 " "가 들어가면 실행시 에러 발생. 해결 방안: AGENT 사용시 - NGRINDER_AGENT_HOME=c:ngrinderagent_home CONTROLLER 사용시 - NGRINDER_HOME=c:ngrindercontroller_home TOMCAT 사용시 - CATALINA_HOME=c:ngrindercontroller 2. [AppDynamics] 구동되면서 OOM permgen space exception 발생할 수 있음. 해결 방안: -XX:MaxPermSize=128m permgen영역을 조금 더 여유 있게 설정 3. [SUT]dbpool이 함정. DB pool은 느리지 않습니다. DB에서 처리하는 시간이 늘어나면서 pool이 부족해 질 수 있습니다. DB pool 관련 method의 처리시간이 길어지고 pool에 반환하지 못하면서 대기시간이 길어집니다. DB pool 설정을 무작정 늘리는 것은 좋지 않다. 아래의 설정은 DB pool 역할을 못한다. <property name="initialSize" value="0"/> <property name="maxActive" value="8"/> <property name="maxIdle" value="0"/>  DB Pool 을 사용하지 않는 것과 같다. 개발자를 위한 공감세미나 11회-오픈 소스/무료 툴을 활용한 성능/부하테스트
  • 39. 7. 활용 팁 1. [SUT]실행 에러를 없애고 테스트 수행할 것 - error있는 소스가 tps나 응답시간이 외곡될 수 있다. 에러처리가 우선!!(TPS/응답시간만 보고 성능이 개선되었다고 착각) - grinder.statistics.forLastTest.setSuccess(False) 처리시 많은 에러가 나면 테스트가 중간 종료됨 2. [nGrinder]시나리오는 심플하게 - 스크립트 만들기도 어렵고, 에러 수정하기도 어렵다. - 시나리오가 복잡하면 평균 TPS를 통해 어디가 병목인지 확인이 어렵다. 3. [nGrinder] 실행 우선, 서서히 다듬기. - 먼저 잘 실행되는 스크립트를 만들고 모니터링 하면서 개선한다. 4. [SUT]시스템의 이해가 필요. - 로그인 중복 방지 경우(user+timestamp로 로그를 남기는 경우 동시에 로그인하면 키중복 에러) - 동일 사용자의 경우 조회수가 변동되지 않는 경우 - spring security의 session, 동시사용자 제한등을 풀어야 제대로 부하를 주는 테스트를 할 수 있다. 5. [전략]테스트 구동 서버, agent, 모니터링 서버 확보 - 동일 서버에서 구동시 과도 부하 발생 개발자를 위한 공감세미나 11회-오픈 소스/무료 툴을 활용한 성능/부하테스트
  • 40. 7. 활용 팁 6. [전략]DB를 사용하는 어플리케이션이라면 DB튜닝과 함께 병행 준비 - 성능저하 포인트는 결국 DB에서 만나게 된다. 7. [nGrinder]script 검증과 부하테스트 환경의 차이 감안(Agent의 127.0.0.1 상황) - SUT에 대한 부하는 nGrinder Agent에서 주기 때문에 원격서버에 설치된 경우 방화벽 설정에 주의 - script의 검증은 nGrinder controller에서 수행하고 실제 부하 테스트 시에는 nGrinder Agent에서 접근함. 8. [nGrinder]Script Gallery를 꼭 구경하자. - nGrinder의 모체인 The Grinder가 어떤 기능을 제공하는지 파악 가능 http://grinder.sourceforge.net/g3/script-gallery.html#form.py 9. [전략]적정 시간 이상 테스트를 수행한 뒤 측정 - 30분이상 부하를 준뒤 성능을 수치를 측정하는것이 좋습니다. - 따라서, 시간이 많이 소요되는 테스트!!(야근주의) 10. [SUT]동일한 환경에 기술요소를 다르게 하여 성능개선 포인트 확보 가능 - tomcat의 connector 를 APR로 바꿨을때 - apache와 nginex의 비교. - 커넥션 풀을 Apache DBCP를 boneCP로 바꿨을때. 개발자를 위한 공감세미나 11회-오픈 소스/무료 툴을 활용한 성능/부하테스트
  • 41. 7. 활용 팁 11. [전략]오픈소스 개발자에게 감사를 표시하자 - http://ngrinder.642.n7.nabble.com/ngrinder-user-kr-f113.html 개발자를 위한 공감세미나 11회-오픈 소스/무료 툴을 활용한 성능/부하테스트
  • 42. 감사합니다. 임성현 : [email protected] 이경환 : [email protected] 개발자를 위한 공감세미나 11회-오픈 소스/무료 툴을 활용한 성능/부하테스트