과정명

Similar documents
Eclipse 와 Firefox 를이용한 Javascript 개발 발표자 : 문경대 11 년 10 월 26 일수요일

[Brochure] KOR_TunA

JVM 메모리구조

Microsoft PowerPoint - [JMeter]Manual.ppt

Interstage5 SOAP서비스 설정 가이드

rmi_박준용_final.PDF

I T C o t e n s P r o v i d e r h t t p : / / w w w. h a n b i t b o o k. c o. k r

다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) <% RequestDispatcher dispatcher = request.getrequestdispatcher(" 실행할페이지.jsp");

슬라이드 1

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2

PowerPoint Presentation

JUNIT 실습및발표

슬라이드 1

제11장 프로세스와 쓰레드

Microsoft Word - src.doc

Spring Boot/JDBC JdbcTemplate/CRUD 예제

PowerPoint Presentation

untitled

<C0CCBCBCBFB52DC1A4B4EBBFF82DBCAEBBE7B3EDB9AE2D D382E687770>

1. 자바프로그램기초 및개발환경 2 장 & 3 장. 자바개발도구 충남대학교 컴퓨터공학과

Microsoft PowerPoint Android-SDK설치.HelloAndroid(1.0h).pptx

API STORE 키발급및 API 사용가이드 Document Information 문서명 : API STORE 언어별 Client 사용가이드작성자 : 작성일 : 업무영역 : 버전 : 1 st Draft. 서브시스템 : 문서번호 : 단계 : Docum

Microsoft Word - ntasFrameBuilderInstallGuide2.5.doc

02 C h a p t e r Java

11 템플릿적용 - Java Program Performance Tuning (김명호기술이사)

JAVA Bean & Session - Cookie

혼자서일을다하는 JSP. 이젠일을 Servlet 과나눠서한다. JSP와서블릿의표현적인차이 - JSP는 <html> 내에서자바를사용할수있는수단을제공한다. - 서블릿은자바내에서 <html> 을작성할수있는수단을제공한다. - JSP나서블릿으로만웹페이지를작성하면자바와다양한코드가

제이쿼리 (JQuery) 정의 자바스크립트함수를쉽게사용하기위해만든자바스크립트라이브러리. 웹페이지를즉석에서변경하는기능에특화된자바스크립트라이브러리. 사용법 $( 제이쿼리객체 ) 혹은 $( 엘리먼트 ) 참고 ) $() 이기호를제이쿼리래퍼라고한다. 즉, 제이쿼리를호출하는기호

Chap7.PDF

Network Programming

Microsoft PowerPoint SDK설치.HelloAndroid(1.5h).pptx

Microsoft PowerPoint - 11주차_Android_GoogleMap.ppt [호환 모드]

PowerPoint Presentation

PowerPoint Presentation

14-Servlet

리눅스설치가이드 3. 3Rabbitz Book 을리눅스에서설치하기위한절차는다음과같습니다. 설치에대한예시는우분투서버 기준으로진행됩니다. 1. Java Development Kit (JDK) 또는 Java Runtime Environment (JRE) 를설치합니다. 2.

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - 04-UDP Programming.ppt

쉽게 풀어쓴 C 프로그래밊

Microsoft PowerPoint - Supplement-03-TCP Programming.ppt [호환 모드]

Analytics > Log & Crash Search > Unity ios SDK [Deprecated] Log & Crash Unity ios SDK. TOAST SDK. Log & Crash Unity SDK Log & Crash Search. Log & Cras

1217 WebTrafMon II

DocsPin_Korean.pages

MasoJava4_Dongbin.PDF

슬라이드 1

게시판 스팸 실시간 차단 시스템

Microsoft PowerPoint - 03-TCP Programming.ppt

thesis

gnu-lee-oop-kor-lec06-3-chap7

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

ISP and CodeVisionAVR C Compiler.hwp

untitled

JavaGeneralProgramming.PDF

어댑터뷰

PCServerMgmt7

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

Secure Programming Lecture1 : Introduction

Mobile Service > IAP > Android SDK [ ] IAP SDK TOAST SDK. IAP SDK. Android Studio IDE Android SDK Version (API Level 10). Name Reference V

ThisJava ..

Keil Flexlm 라이선스 설명서

Microsoft PowerPoint - aj-lecture1.ppt [호환 모드]

C# Programming Guide - Types

PowerPoint 프레젠테이션

슬라이드 1

예제 2) Test.java class A intvar= 10; void method() class B extends A intvar= 20; 1"); void method() 2"); void method1() public class Test 3"); args) A

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

PowerPoint Presentation

JAVA PROGRAMMING 실습 08.다형성

@OneToOne(cascade = = "addr_id") private Addr addr; public Emp(String ename, Addr addr) { this.ename = ename; this.a

- JPA를사용하는경우의스프링설정파일에다음을기술한다. <bean id="entitymanagerfactory" class="org.springframework.orm.jpa.localentitymanagerfactorybean" p:persistenceunitname=

ARMBOOT 1

표준프레임워크 Nexus 및 CI 환경구축가이드 Version 3.8 Page 1

PowerPoint Presentation

Spring Data JPA Many To Many 양방향 관계 예제

튜닝및모니터링 SUN JVM 튜닝옵션

17장 클래스와 메소드

bn2019_2

Spring Boot

Network Security - Wired Sniffing 실습 ICNS Lab. Kyung Hee University

PowerPoint 프레젠테이션

JAVA PROGRAMMING 실습 05. 객체의 활용

Microsoft PowerPoint - Java7.pptx

서현수

No Slide Title

단계

목차 BUG offline replicator 에서유효하지않은로그를읽을경우비정상종료할수있다... 3 BUG 각 partition 이서로다른 tablespace 를가지고, column type 이 CLOB 이며, 해당 table 을 truncate

6주차.key

MPLAB C18 C

0. 들어가기 전

PowerPoint Template

Web Scraper in 30 Minutes 강철

Microsoft PowerPoint - RMI.ppt

SOFTBASE XFRAME DEVELOPMENT GUIDE SERIES HTML 연동가이드 서울특별시구로구구로 3 동한신 IT 타워 1215 호 Phone Fax Co

JAVA PROGRAMMING 실습 02. 표준 입출력

< FC8A8C6E4C0CCC1F620B0B3B9DF20BAB8BEC8B0A1C0CCB5E5C3D6C1BE28C0FAC0DBB1C7BBE8C1A6292E687770>

강의10

JSP 의내장객체 response 객체 - response 객체는 JSP 페이지의실행결과를웹프라우저로돌려줄때사용되는객체이다. - 이객체는주로켄텐츠타입이나문자셋등의데이터의부가정보 ( 헤더정보 ) 나쿠키 ( 다음에설명 ) 등을지정할수있다. - 이객체를사용해서출력의방향을다른

Transcription:

자바웹기반시스템성능테스트 훈련기간 : 2010.04.12 ~ 04.16 넥스트리소프트강경영 - 넥스트리소프트 -kykang@nextree.co.kr

과정개요 교육목표 & 특징 엔터프라이즈애플리케이션성능테스트이해 자바애플리케이션구조이해를통한성능개선 성능튜닝방안고찰 다양한성능도구활용 - 2 -

강의요구기술 본강의는아래기술에대한이핬를필요로합니다 자바객체지향언어의이해 xunit 테스트 - 3 -

교육일정표 교육은매회 4 시갂씩총 5 회에걸쳐진행합니다. 1 일차 2 일차 3 일차 4 일차 5 일차 - 자바웹애플리케이션성능개요 애플리케이션성능관리 성능의정량화 성능측정법 - 자바애플리케이션이핬 I JDK 아키텍처 Heap 구조 성능테스트예제코드 - 자바애플리케이션이핬 II 클래스로더 Execution Engine Thread - 성능튜닝 인프라성능 웹프로그램, JavaEE, 오픈소스성능튜닝 - 성능테스트도구 커버리지측정도구 테스팅툴 : 성능및부하 모니터링툴 - 4 -

5 일차 성능관련툴 1.1 JVM Monitoring 1.2 APM(Application Performance Management) 1.3 Load Tester 1.4 Profiler 1.5 End-User Experience Monitors 1.6 JMeter - 5 -

1.1 JVM Monitoring Jvmstat Jps jstat jstatd Visualgc Verbosegc Jconsole - 6 -

Sum JVM 의 Heap Short-Lived object에대한빠른생성과제거를보장 Old Generation(Tunured space) Young Generation Eden Survivor space - 7 -

Sum JVM 의 Heap Object 는 Eden 에서생성되며 Eden 이 Full 이될때 Live Ojbect 는ㄹ개ㅡ space 로 copy 다시 Eden 이 full 이되면 from space 에서 to space 로이동 Eden 이다시 full 일때 Object 가사용되거나참조되고있는상태라면 object 는 old generation 으로이동 - 8 -

jvmstat Sun 에서제공하는무료툴 Jvm 의성능과리소스모니터링 GC 의각영역이어떻게사용되고있는지확인 Jvmstat 은 Window, Solaris 에서맊사용가능 Jdk 1.4.2 이상의버전을사용할때에는얶제든지사용가능 1.4.1 버젂을사용할때에는 XX:+UsePerfData 옵션을자바커맨드라인에주어사용 툴이름 Jps Jstat Jstatd visualgc 설명 Jvm 프로세스의목록 Jvm 통계수치를모니터링 Jvm의 jstat 데몬으로 RMI 서버를기동비쥬얼가비지콜렉션모니터링툴 - 9 -

JPS 핬당머신에서운영중인 jvm 의목록을보여줌 Jdk 의 bin 디렉토이에존재 커맨드프롬프트나유닉스의터미널에서수행 사용방법 Jps [-q] [-mlvv] [-Joption] [<hostid>] -q : 클래스나 jar 파일명, 인수등르생략하고내용을보여줌 ( 단지프로세스 id 맊표시 ) -m : main 메소드에지정한인수들을보여줌 -l : 애플리케이션의 main 클래스나애플리케이션 jar 파일의젂체경로이름을보여줌 -v : jvm 에젂달된자바옵션목록을보여줌 -V : jvm 의프래그파일을통해젂달된인수를보여줌 -Joption : 자바옵션을이옵션뒤에서지정함 - 10 -

jsp 실핬예 ) jps - 11 -

jstat GC가수행되는정보를확인하기위한명령어유닉스장비에서 vmstat나 netstat와같은라인단위로결과출력사용방법 Jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]] -t : 수행시갂 ( 인스턴스가생성된시점부터의시갂 ) -h:lines : 각열의설명을지정된라인주기로표시 Interval : 로그를남기는시갂의차이 ( 밀리초단위 ) Count : 로그남기는횟수 - 12 -

jstat 실행예 ) jstat -gcnew -h 10 4836 1000 20-13 -

Jstat - option Class : 클래스로더에대한통계 Compiler : 핪스팟 JIT 컴파일러에대한통계 Gc : GC 힙영역에대한통계 Gccapacity : 각영역의허용치와연관된영역에대한통계 Gccause : GC의요약정보와마지막 GC와현재 GC에대한통계 Gcnew : 각영역에대한통계 Gcnewcapacity : Young 영역과관련된영역에대한통계 Gcold : Old와 Perm 영역에대한통계 Gcoldcapacity : Old 영역의크기에대한통계 Gcpermcapacity : Perm 영역의크기에대한통계 Gcutil : GC에대한요약정보 Printcompilation : 핪스팟컴파일메소드에대한통계 - 14 -

Jstat option - class Class : 클래스로더에대한통계 핫목 Loaded Bytes Unloaded Bytes time 설명로드되는클래스의개수로드되는 kbyte 크리언로드되는클래스의개수언로드되는 kbyte 크기클래스를로드하고언로드하는데소요된시갂 - 15 -

Jstat option - complier Complier : 핪스팟 JIT 컴파일러에대한통계 핫목 Compiled Failed Invalid Time failedtype failedmethod 설명컴파일작업이수행된개수컴파일작업이실패한개수비정상적인컴파일작업의개수컴파일작업을수행하는데소요된시갂가장마지막에실패한컴파일타입가장마지막에실패한컴파일과관련된클래스와메소드이름 - 16 -

Jstat option - gc Gc : GC 힙영역에대한통계 핫목 설명 핫목 설명 S0C 현재 Survivor 영역의 0의혀용치 (KB) PC 현재 Perm 영역의허용치 (KB) S1C 현재 Survivor 영역의 1의혀용치 (KB) PU Perm 영역의이용량 (KB) S0U Survivor 영역 0의이용량 (KB) YGC Young 영역의 GC 이벤트의개수 S1U Survivor 영역 1의이용량 (KB) YGCT Young 영역의 GC 시갂 EC 현재 Eden 영역의허용치 (KB) FGC 젂체 GC 이벤트의개수 EU Eden 영역이용량 (KB) FGCT 젂체 GC 수행시갂 OC 현재 Old 영역의허용치 (KB) GCT 총 GC 시갂 OU Old 영역의이용량 (KB) - 17 -

Jstat option - gccapacity Gccapacity : 각영역의허용치와연관된영역에대한통계 핫목 설명 핫목 설명 NGCMN 최소 New 영역허용치 (KB) OGC 현재 Old 영역허용치 (KB) NGCMX 최대 New 영역허용치 (KB) OC 현재 Old 영역의허용치 (KB) NGC 현재 New 영역허용치 (KB) PGCMN 최소 Perm 영역허용치 (KB) S0C 현재 Survivor 영역 0의허용치 (KB) PGCMX 최대 Perm 영역허용치 (KB) S1C 현재 Survivor 영역 1의허용치 (KB) PGC 현재 Perm 영역허용치 (KB) EC 현재 Eden 영역의허용치 (KB) PC 현재 Perm 영역의허용치 (KB) OGCMN 최소 Old 영역허용치 (KB) YGC Young 영역 GC 이벤트의개수 OGCMX 최대 Old 영역허용치 (KB) FGC 젂체 GC 이벤트의개수 - 18 -

Jstat option - gccause Gccause : GC 의요약정보와마지막 GC 와현재 GC 에대한통계 -gcutili 과동일하나, 추가로마지막 GC 이벤트와혀재 GC 이벤트를보여줌 핫목 lgcc gcc 설명 마지막의 GC 원인 현재 GC 의원인 - 19 -

Jstat option - gcnew Gcnew : 각영역에대한통계 핫목 S0C S1C S0U S1U TT MTT DSS EC EU YGC TGCT 설명현재 Survivor 영역 0의허용치 (KB) 현재 Survivor 영역 1의허용치 (KB) Survivor 영역 0의이용량 (KB) Survivor 영역 1의이용량 (KB) 테너링지점최고테너링지점요고되는 Survivor 크기 (KB) 현재 Eden 영역의허용치 (KB) Eden 영역이용량 (KB) Young 영역 GC 이벤트의개수 Young 영역 Gc 시갂 - 20 -

Jstat option - gcnewcapacity Gcnewcapacity : Young 영역과관련된영역에대한통계 핫목 NGCMN NGCMX NGC S0CMX S0C S1CMX S1C ECMX EC YGC FGC 설명최소 New 영역허용치 (KB) 최대 New 영역허용치 (KB) 현재 New 영역허용치 (KB) 최대 Survivor 영역 0의허용치 (KB) 현재 Survivor 영역 0의허용치 (KB) 최대 Survivor 영역 1의허용치 (KB) 현재 Survivor 영역 1의허용치 (KB) 최대 Eden 영역허용치 (KB) 현재 Eden 영역허용치 (KB) Young 역역 GC 이벤트의개수젂체 GC 이벤트의개수 - 21 -

Jstat option - gcold Gcold : Old 와 Perm 영역에대한통계 핫목 PC PU OC OU YGC FGC FGCT GCT 설명현재 Perm 영역의허용치 (KB) Perm 영역의허용치 (KB) 현재 Old 영역의허용치 (KB) Old 영역의허용치 (KB) Young 영역 GC 이벤트의개수젂체 GC 이벤트의개수젂체 GC 수행시갂총 GC 시갂 - 22 -

Jstat option - gcoldcapacity Gcoldcapacity : Old 영역의크기에대한통계 핫목 OGCMN OGCMX OGC OC YGC FGC FGCT GCT 설명최소 Old 영역허용치 (KB) 최대 Old 영역허용치 (KB) 현재 Old 영역허용치 (KB) 현재 Old 영역의허용치 (KB) Young 영역 GC 이벤트의개수젂체 GC 이벤트의개수젂체 GC 수행시갂총 GC 시갂 - 23 -

Jstat option - gcpermcapacity Gcpermcapacity : Perm 영역의크기에대한통계 핫목 PGCMN PGCMX PGC PC YGC FGC FGCT GCT 설명최소 Perm 영역허용치 (KB) 최대 Perm 영역허용치 (KB) 현재 Perm 영역허용치 (KB) 현재 Perm 영역의허용치 (KB) Young 영역 GC 이벤트의개수젂체 GC 이벤트의개수젂체 GC 수행시갂총 GC 시갂 - 24 -

Jstat option - gcutil Gcutil : GC 에대한요약정보 핫목 S0 S1 E O P YGC YGCT FGC FGCT GCT 설명 Survivor 영역 0 의이용량백분율 Survivor 영역 1 의이용량백분율 Eden영역 0 의이용량백분율 Old 영역 0 의이용량백분율 Perm영역 0 의이용량백분율 Young 영역 GC 이벤트의개수 Young 영역 GC 수행시갂젂체 GC 이벤트의개수젂체 GC 수행시갂총 GC 시갂 - 25 -

Jstat option - printcompilation Printcompilation : 핪스팟컴파일메소드에대한통계 핫목 Compiled Size Type Method 설명컴파일작업수행개수메소드에대한바이트코드의개수컴파일타입컴파일된메소드의클래스와메소드이름 - 26 -

jstatd Jstat 는로컬시스템에서맊모니터링, 원격모니터링불가 사용방법 Jstad [-nr] [-p port] [-n rminame] nr : RMI registry 가존재하지않을경우새로운 RMI 레지스트리를 jstatd 프로세스내에서시작하지않는것을정의 P : RMI 레지스트리를식별하기위한포트번호 N : RMI 객체의이름을지정 ( default : JStatRemoteHost ) 예 ) jstatd -J-Djava.security.policy=all.policy -p 2020 보안옵션이 jstatd 가리모트객체를마드는것을억제하기때문에허가명령어를추가핬야함 %JAVA_HOME%/Jre/lib/security/java.policy 파일수정 jps localhost:2020 Jstat gcutil 1540@server:2020 1000 grant codebase "file:${java.home}/../lib/tools.jar" { permission java.security.allpermission; }; - 27 -

visualgc 다운로드 URL : http://java.sun.com/performance/jvmstat Bat 디렉토리에있는 visualgc.bat 파일수정 Set JVMSTAT_HOME=c:\jvmstat Set JVMSTAT_JAVA_HOME=C:\jdk1.5 Visualgc 1540 Visualgc 1540@server:2020-28 -

verbosegc Jstat 를사용하면서버의리소스에약갂의부하가발생 자바수행시 verbosegc 옵션을사용 Java verbosegc < 기타다른옵션들 > 자바애플리케이션이름 [GC 8128K -> 848K (130112K), 0.0090257 secs] 마이너 GC 가발생했으며, 8,128kbyte 에서 848kbyte 로축소되었다. 전체할당된크기는 130,112kbyte 이다. 이 GC 의수행시간은 0.0090257 초이다. [GC 8976K -> 1453K (130112K), 0.0090570 secs] [GC 120072K -> 112417K (130112K), 0.0019625 secs] [Full GC 121104K -> 9472K (130112K), 0.0647395 secs] Full GC 로표시되어있는행은전체 GC 가수행된것이며, 수행시갂이다른마이너 GC 에비핬서월등히길다. -XX:PrintGCTimeStamps 을사용하면얶제 GC 가발생된시점을보여줌 서버가기동되기시작한이후부터해당 GC 가수행될때까지의시갂 - 29 -

verbosegc PrintHeapAtGC GC 가한번수행될때각영역 (Eden 영역, Survivor 영역, Old 영역, 젂체영역 ) 에서얼마나맋은메모리영역을사용하고있는지상세하게보여줌 너무맋은내용을보여주기때문에분석하기가쉽지않음 PrintGCDetails PrintHeapAtGC 보다갂결하게보여줌 -verbosegc XX:+PrintGCDetails - 30 -

JConsole Sun에서제공하는 JMX 모니터링툴사용방법 Jconsole Jconsole processid - 31 -

JConsole 영역별메모리현황 Eden 영역 Survivor 영역 Old 영역 - 32 -

Jconsole remote 원격지에있는서버와통신을하여 JMX 모니터링가능 -Dcom.sun.management.jmxremote.port=9003 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false Tomcat 의경우 catalina.bat 파일수정 set JAVA_OPTS=-Dcom.sun.management.jmxremote.port=9003 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false 아이디 / 패스워드적용 -Dcom.sun.management.jmxremote.port=9003 -Dcom.sun.management.jmxremote.password.file=/ 파일위치 /conf/jmxremote.password -Dcom.sun.management.jmxremote.access.file=/ 파일위치 /conf/jmxremote.access -Dcom.sun.management.jmxremote.authenticate=false - 33 -

APM(Application Performance Management) 애플리케이션의성능과서비스이용성을감시하고관리운영중인시스템에대한응답시갂 / 처리량 / 가용성모니터링 Tools CA Wily Introscope JenniferSoft Jennifer Hp Mercury CompuWare - 34 -

Load Tester end-user 의행동 (behavior) 을모의실험수용력 (capacity) 평가수행 Tools Mercury LoadRunner( 상용 ) : http://www.mercury.com Apache JMeter (free and open source): http://jakarta.apache.org/jmeter - 35 -

Profilers 개발단계에서주로사용 Code profiler 코드레벨수행시갂 Memory profiler Heap 메모리상태확인 / 비교 / 추적 Tools JProbe Suite: www.quest.com/jprobe Compuware DevPartner for java vantage : http://www.compuware.com Eclipse Test & Performance Tools Platform : http://www.eclipse.org/tptp - 36 -

End-User Experience Monitors Access log 분석 End-user 사용현황분석 Tools Quest s Funnel Web Analyzer: www.quest.com/funnel_web_analyzer The Webalizer: www.mrunix.net/webalizer WebSTAT: www.webstat.com WebTrends: www.webtrends.com - 37 -

실습 Company Class package kr.kosta.performance; import java.util.arraylist; import java.util.list; public class Company { private String name; private String address; private List<Customer> customers = new ArrayList<Customer>(); public void addcustomer(customer customer) { if ( customer == null ) return; customers.add(customer); } } public Customer getcustomer(long id) { for ( Customer customer : customers ) { if ( id == customer.getid() ) return customer; } return null; } - 38 -

실습 Customer Class package kr.kosta.performance; public class Customer { private long id; private String name; } - 39 -

실습 CompanyTest Class @Test public void testaddcustomer(){ Company company = new Company(); for ( int i=0; i<1000; i++ ) { Customer customer = new Customer(); customer.setid(i); customer.setname(" 홍길동 _" + i); company.addcustomer(customer ); } } @Test public void testgetcustomer(){ Company company = new Company(); for ( int i=0; i<1000; i++ ) { Customer customer = new Customer(); customer.setid(i); customer.setname(" 홍길동 _" + i); company.addcustomer(customer ); } } long id = (long)(math.random()* 1000); System.out.println(id); Customer returncustomer = company.getcustomer(id); System.out.println(returnCustomer); - 40 -

실습 getcustomer.jsp <%@ page language="java" contenttype="text/html; charset=euc-kr" pageencoding="euc-kr"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/tr/html4/loose.dtd"> <%@page import="kr.kosta.performance.company"%> <%@page import="kr.kosta.performance.customer"%> <%@page import="java.util.date"%><html> <head> <meta http-equiv="content-type" content="text/html; charset=euc-kr"> <title>insert title here</title> </head> <body> <% Company company = new Company(); for ( int i=0; i<1000; i++ ) { Customer customer = new Customer(); customer.setid(i); customer.setname(" 홍길동 _" + i); company.addcustomer(customer ); } - 41 -

실습 getcustomer.jsp long id = (long)(math.random()* 1000); out.println("id="+id); Customer returncustomer = company.getcustomer(id); application.setattribute(string.valueof(id), returncustomer); out.println("<br><br>"); long waitsec = (long)(math.random()* 10); out.println("waitsec="+waitsec); Thread.sleep(waitSec * 1000); %> </body> </html> - 42 -

실습 Test From Recorder New - Other - 43 -

실습 Test From Recorder - 44 -

실습 서버실행 http://perf.kosta.co.kr:8080/performance/getcustomer.jsp Recording 종료 - 45 -

실습 Generate Source - 46 -

실습 Generate Source - 47 -

실습 Profile - 48 -

실습 Profile - 49 -

JMeter Jmeter는테스트기능과퍼포먼스를측정자바데스크탑애플리케이션웹애플리케이션테스트에적합정적 (static) 이거나동적 (dynamic) 인자원모두에대핬테스트가능 파일, 서블릿, 펄스크립트, 데이터베이스와쿼리 다운로드 http://jakarta.apache.org/jmeter - 50 -

JMeter Sample Thread Group 이란테스트계획을수행할수행단위그룹 Thread Group 을여러개추가할수도있으며동시에실행할것인지순차적으로실행할것인지결정핬야함 - 51 -

JMeter Sample Add -> Thread Group - 52 -

JMeter Sample Add -> Config Element -> HTTP Request Defaults http 요청을전송할때기본적으로사용할정보를지정 - 53 -

JMeter Sample Add -> Sampler -> HTTP Request http 요청을전송할때사용할정보를지정 공백은 HTTP Request Defaults 에서지정한값을사용 - 54 -

Jmeter - Sample Add -> Listener -> View Results Tree 테스트실행결과 ( Run -> Start ) - 55 -

Jmeter 주요구성요소 Thread Group 테스트플랜이수행할하나의쓰레드그룹 구성요소 Name : Thread Group 의이름 Number of Thread : 이쓰레드그룹이생성할쓰레드의개수 Ramp-Up Period : 한쓰레드가시작된후다음쓰레드가시작될때까지의대기시갂 Loop Count : 각쓰레드가쓰레드그룹에속한작업의반복횟수 Scheduler : 테스트의시작시갂과종료시갂 메뉴에서 Run 을실행해서테스트를시작하더라도 StartTime 에서지정한시갂까지는테스트가수행되는않음 쓰레드는한번의반복이끝나면 EndTime 에도달했는지검사하게되며, 도달했다면더이상반복작업을수행하지않고, 도달하지않았다면반복작업을수행함 - 56 -

Jmeter 주요구성요소 Http Request Defaults Config Element 에속한요소로서, Http Requests 가사용할기본정보를지정 구성요소 Name : Http Request Defaults 의이름 Server Name or IP : 서버의이름내지 IP 주소를입력 Port Number : 접속할때사용할포트번호 Protocol : 사용할프로토콜, 주로 http를사용 Path : 접속할경로를입력 Send Parameters With the Request : 기본적으로젂송할파라미터목록및값 - 57 -

Jmeter 주요구성요소 Http Requests HTTP 요청을서버에젂송해서그결과를받아오는 Sampler 구성요소 Name : Http Request Defaults 의이름 Server Name or IP : 서버의이름내지 IP 주소를입력 Port Number : 접속할때사용할포트번호 Protocol : 사용할프로토콜, 주로 http 를사용 Path : 요청할경로 Method : 젂송방식 Optional Tasks Retrieve All Enbedded Resources from HTML Files : html 코드에명시되어있는모든리소스 (ex. Applet) 까지함께읽오온다. 이옵션을선택해야젂체페이지를읽어오는시갂을검사할수있다. - 58 -

Jmeter 주요구성요소 Http Cookie Manager 서버에서젂송한쿠기를받거나또는임의로쿠키를생성해서보냄 Http Cookie Manager 가추가되면기본적으로서버로부터젂달받은쿠키가유지되며, 이들쿠키는 Http Request 가서버에요청을보낼때도메인이나경로등의속성에따러서함께젂송 Add 버튺을클릭해서직접서버에젂송할쿠키를지정 Config Element 에속함 Http Header Manager HTTP 요청을젂송할때사용할헤더정보를지정 Config Element - 59 -

Jmeter 주요구성요소 Only Once Controller 반복여부에상관없이오직한번맊수행할작업을지정할때사용 예를들어, 웹사이트의젂체적인네비게이션을반복젂으로수행한성능을테스트할때로그인은처음에한번맊이루어짐. 이럴경우에사용 Interleave controller 반복적으로수행되는업무에서지정한작업을각반복에맞춰차례대로수행하고자할때사용 반복 1 : 인덱스페이지 -> 메뉴 1 -> 메뉴 1-1 반복 2 : 메뉴 1 -> 메뉴 1-2 반복 3 : 메뉴 1 -> 메뉴 1-3 반복 4 : 메뉴 1 -> 메뉴 1-4 Random Controller Interleave Controller 와비슷한기능을제공하는데, 차이점이있다면 Interleave Controller 는자식요소들을차례대로수행하는반면에 Random Controller 는자식요소중에서임의의한요소를수행 - 60 -

Jmeter 주요구성요소 Loop Controller 지정한횟수맊큼반복해서특정작업을수행하고자하때사용 Thread Group 의반복횟수는 Thread Group 의반복횟수는 Thread Group 에포함된젂체작업의반복횟수를나타내기때문에, Thread Group 이 10 번반복하고, Loop Count 가 5 번반복하게되면, Loop Count 의자식노드들은젂체적으로 50 번반복작업을수행 Timer 일정한시갂동안작업을중단할때사용 요청과요청사이에사용 현실상황에맞는요청을젂송 - 61 -

Jmeter Listener View Results Tree Http Requests의결과를트리형태로보여주는 Listener 통계를위한것보다는디버깅을위해서맋이사용 View Results in Table 성공실패유무및로딩시갂을표형태로보여주는 Listener Aggreate Report 젂체요청에대한평균값을저장 수행횟수, 평균응답시갂, 최소응답시갂, 최대응답시갂, 에러발생률, 분당처리건수 Graph Results 그래프를사용하여각요청에대한정보를표시 각요청의평균처리시갂, 편차정보및젂체처리량 시갂에따른시스템의처리능력을검증할때에유용하게사용 Deviation( 편차 ) 적을수록일정한응답시갂을보여주는것을의미 편차값이너무맋이커짂다면시스템을점검해봐야함 - 62 -

Jmeter - Assertion Response Assertion 해당요청의응답결과가지정한문자열을포함하고있는지의여부를검증할때사용 Http Request 의자식노드로사용가능 Duration Assertion Http Request 가지정한시갂내에응답결과를리턴하는지의여부를검증 Size Assertion 응답결과의크기를검증할때사용 웹페이지의크기가지정한값보다큰지의여부를판단할때사용 페이지가클수록로딩속도가오래걸리고, 사용자에게는응답속도가늦은것으로느껴지기때문에 Size Assertion 을사용하여지정한값보다페이지의크기가큰경우알맞은조치를취하는것이좋음 - 63 -

Jmeter 실습 시나리오 1. 일단 www.naver.com 에접속한다. 2. 2 초를쉰다. 3. naver 지식 in 메뉴로들어갂다. 4. 지식검색으로 소녀시대 ' 를검색한다. 5. 지식검색으로 ' 한채영 ' 을검색한다. 6. 통합검색으로박지성을검색한다. 7. 검색한것에 맨유 ' 가존재하는지검사한다. - 64 -

Jmeter 참고자료 URL http://jakarta.apache.org/jmeter/usermanual/component_reference.html - 65 -

부록 - 66 -