nGrinder 소개 + 고급 사용법
- 아키텍쳐
- 자이선 / 그루비 스크립트 동작 방식
- DB 테스트
- 로그 레벨 조작 방법
- 리소스 처리 방법
- 라이브러리 처리 방법
- 대규모 응답 처리 방법
- 가중치 부여 방법
- 쓰레드별 다른 처리 방법
- XML / JSON 처리 방법
nGrinder 소개 + 고급 사용법
- 아키텍쳐
- 자이선 / 그루비 스크립트 동작 방식
- DB 테스트
- 로그 레벨 조작 방법
- 리소스 처리 방법
- 라이브러리 처리 방법
- 대규모 응답 처리 방법
- 가중치 부여 방법
- 쓰레드별 다른 처리 방법
- XML / JSON 처리 방법
모바일 앱 성능 분석 방법 101 (Mobile Application Performance Analysis Methodology 101) YoungSu Son
모바일 앱 성능 분석 방법에 대해서 설명을 드립니다
- 기존 서버 APM과 모바일에서의 성능 기준의 차이
- 모바일 제약사항및 아키텍처
- 안드로이드는 어떻게 발전해 왔나
- Vectorization
- Loop
- Redex / Optimized Layout
- Garbage Collector
- 제조사가 보장해야 되는 성능
- 개발사가 고민해야 되는 영역
- 실사례 설명
- 갤럭시노트 2의 점유율
- Xiaomi 폰의 국내 4위 시장 점유율
- 여러가지 모바일 성능 리포트
상업적 이용 및 출처없는 무단전재를 금합니다.
애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)
애자일의 스크럼, XP에 대한 기본적인 소개와 스크럼 팀 안에서 테스트 역할자로써 사용자 스토리 리뷰, 테스트 설계, 짝 테스트, 테스트 자동화 등에 대한 내용을 사례 기반으로 소개하고 있습니다.
모바일 앱 성능 분석 방법 101 (Mobile Application Performance Analysis Methodology 101) YoungSu Son
모바일 앱 성능 분석 방법에 대해서 설명을 드립니다
- 기존 서버 APM과 모바일에서의 성능 기준의 차이
- 모바일 제약사항및 아키텍처
- 안드로이드는 어떻게 발전해 왔나
- Vectorization
- Loop
- Redex / Optimized Layout
- Garbage Collector
- 제조사가 보장해야 되는 성능
- 개발사가 고민해야 되는 영역
- 실사례 설명
- 갤럭시노트 2의 점유율
- Xiaomi 폰의 국내 4위 시장 점유율
- 여러가지 모바일 성능 리포트
상업적 이용 및 출처없는 무단전재를 금합니다.
애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)
애자일의 스크럼, XP에 대한 기본적인 소개와 스크럼 팀 안에서 테스트 역할자로써 사용자 스토리 리뷰, 테스트 설계, 짝 테스트, 테스트 자동화 등에 대한 내용을 사례 기반으로 소개하고 있습니다.
TestExplorer 소개 - Android application GUI testing toolhyunae lee
TestExplorer is 100% automated testing solution for Android application based on GUI which is available in entire development process from development and verification.
- A dynamic GUI testing tool for detecting the abnormality of the application by running the event (Touch, Click, Swipe, Back Space, Rotate, etc.)
- 100% automated GUI testing tool in entire development process (App building with source, Installing App, Running App on target device, GUI Exploring, Generating GUI tree, Generating test script, Running test script and Reporting)
TestExplorer 소개 - Android application GUI testing toolhyunae lee
TestExplorer is 100% automated testing solution for Android application based on GUI which is available in entire development process from development and verification.
- A dynamic GUI testing tool for detecting the abnormality of the application by running the event (Touch, Click, Swipe, Back Space, Rotate, etc.)
- 100% automated GUI testing tool in entire development process (App building with source, Installing App, Running App on target device, GUI Exploring, Generating GUI tree, Generating test script, Running test script and Reporting)
서버단에 비해 상대적으로 UI는 분석 및 테스트 수행 여부를 파악하기 쉽지 않습니다. 웹 UI의 HTML 또는 XML 형태의 엘리멘트와
다양한 이벤트들을 정적으로 분석하고 이를
1) 테스트 대상으로 활용
2) 개발완료 여부, 표준 준수 여부 등을 검사
3) 개발 완료 이후 변경 부분 히스토리 관리
등으로 활용한 사례를 공유합니다
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. 감사합니다.
임성현 : sunghyun.lim@gmail.com
이경환 : khlee03@gmail.com
개발자를 위한 공감세미나 11회-오픈 소스/무료 툴을 활용한 성능/부하테스트