ibm was enablement about jvm for bps

20
2011. 9. IBM SoftwareGroup WebSphere CTP 이정운 과장 (JungWoon Lee, [email protected]) © Copyright IBM Corporation 2011 SoftwareGroup, IBM Korea IBM JVM IBM WAS 의 Classloader 소개 Create PDF files without this message by purchasing novaPDF printer (http://www.novapdf.com)

Upload: jungwoon-lee

Post on 14-Dec-2014

339 views

Category:

Technology


6 download

DESCRIPTION

IBM WAS enablement about JVM for BPs

TRANSCRIPT

Page 1: IBM WAS enablement about JVM for BPs

1SoftwareGroup WebSphereConfidential - Do Not Distribute

2011. 9.

IBM SoftwareGroup WebSphere CTP 이정운 과장 (JungWoon Lee, [email protected])

© Copyright IBM Corporation 2011

SoftwareGroup, IBM Korea

IBM JVM 과IBM WAS 의 Classloader 소개

Create PDF files without this message by purchasing novaPDF printer (http://www.novapdf.com)

Page 2: IBM WAS enablement about JVM for BPs

2SoftwareGroup WebSphereConfidential - Do Not Distribute

1. JVM(Java Virtual Machnine) JVM 은 Java Bytecode 를 실행할 수 있는 주체이다. Java Bytecode 는 플랫폼에 독립적이며 모든 JVM 은 JVM 규격에 정의된

대로 Java Bytecode 를 실행한다. 따라서 표준 자바 API까지 동일한 동작을 하도록 구현한 상태에서는 이론적으로 모든 Java 프로그램은 CPU나 운영 체제의 종류와 무관하게 동일하게 동작할 것을 보장한다.

Java Platform (JRE) : Java VM + 표준 Java 라이브러리

Java VM : Load & Execute Java binary(.class format)

세 개의 핵심 Component

– ClassLoader

• Java binary load + Runtime data 로의 변환

• Loader, Linker

– Execution Engine

• Bytecode 실행 + Native로의 연결

• Interpreter, Compiler

– VM Runtime

• VM이 갖고 있는 data 및 그 관리자

• Heap (GC), Thread, Lock

Create PDF files without this message by purchasing novaPDF printer (http://www.novapdf.com)

Page 3: IBM WAS enablement about JVM for BPs

3SoftwareGroup WebSphereConfidential - Do Not Distribute

1. JVM(Java Virtual Machnine) JVM 의 실행시간 데이터 영역은 다시 세부적으로 메소드 영역, 힙 영역, 스택 영역, PC 레지스터, Native 메소

드 스택으로 나뉘어 집니다.

클래스 로더

메소드(method)영역

-메소드의바이트코드-클래스 변수

힙(heap) 영역

-객체

스택(stack) 영역

-매개변수-지역변수

PC 레지스터 Native 메소드스택

실행 엔진 Native 메소드 인터페이스

실행시간 데이터 영역(Runtime data area)

클래스 파일

Native 메소드라이브러리

클래스라이브러리

Create PDF files without this message by purchasing novaPDF printer (http://www.novapdf.com)

Page 4: IBM WAS enablement about JVM for BPs

4SoftwareGroup WebSphereConfidential - Do Not Distribute

1. JVM(Java Virtual Machnine) 샘플 자바 소스의 실행시의 JVM 메소드 영역, 스택 영역, 힙 영역의 메모리 모델 예제

메소드 영역

스택 영역 힙 영역

main() 메소드바이트 코드

args null

mainframe

a5 6 7 8

b

b[2]b[1]b[0] 1 2 3

4 5

96 7 8

s1

s2

“Hi Java”

s2[1]s2[0]

“Java”

“Hi”

샘플 자바 소스

class MemoryTest3 {

public static void main(String[] args)

{ int a[] = new int[] {1,2,3};

a = new int[] {5,6,7,8};

System.out.println(a[3]);

int b[][] = new int[][] {{1,2,3},{4,5},{6,7,8,9}};

System.out.println(b[2][3]);

String s1 = "Hi Java";

System.out.println(s1);

String s2[] = new String[] {"Hi","Java"};

System.out.println(s2[1]);

} }

Create PDF files without this message by purchasing novaPDF printer (http://www.novapdf.com)

Page 5: IBM WAS enablement about JVM for BPs

5SoftwareGroup WebSphereConfidential - Do Not Distribute

2. IBM JVM IBM SDK for Java Version 6 는 Sun®(지금은 Oracle) Java 표준을 준수합니다.

IBM SDK for Java Version 6 는 Oracle® Java 표준을 준수합니다.

JSR 173: Streaming API for XML

JSR 222: Java Architecture for XML Binding (JAXB) 2.0

JSR 224: Java API for XML-based Web Services (JAX-WS) 2.0

JSR 118: Web Services Metadata for the Java Platform

JSR 250: Common Annotations for the Java Platform

JSR 269: Pluggable Annotation Processing API

JSR 221: JDBC 4.0 API Specification

JSR 199: Java Compiler API

JSR 223: Scripting for the Java Platform

JSR 202: Class file specification update

Create PDF files without this message by purchasing novaPDF printer (http://www.novapdf.com)

Page 6: IBM WAS enablement about JVM for BPs

6SoftwareGroup WebSphereConfidential - Do Not Distribute

그럼, IBM JDK 와Oracle 의 JDK 는동일한가요?

Create PDF files without this message by purchasing novaPDF printer (http://www.novapdf.com)

Page 7: IBM WAS enablement about JVM for BPs

7SoftwareGroup WebSphereConfidential - Do Not Distribute

3. Oracle JVM 의 Heap 구조

Oracle JVM 은 Heap 영역을 세대별로 나누어서 관리하는 방식을 사용합니다.

Oracle JVM 이 사용하는 Heap 구조 (Hotspot)

Permanent Space : Class에 대한Meta 정보를저장하는 공간- Method of a class(including the bytecodes)- Names of the classes- Constant pool 정보- JVM으로부터 만들어진 내부 객체 ex: java/lang/Object

New Generation- Eden: 새로(new) 생긴 모든객체- Survivor1(SS1)

> Minor GC에의해서 Eden, Survivor 2영역의객체 중 활성화된객체만 이동하여 위치> Old Space로이동되기 전의 객체만위치

- Survivor 2(SS2)> Minor GC에의해서 Eden, Survivor 1영역의객체 중 활성화된객체만 이동하여 위치> Old Space로이동되기 전의 객체만위치

Old Generation- Survivor 1, Survivor 2 영역에서이동해온 객체만 위치- Full GC의대상이 되는 객체가 위치

Create PDF files without this message by purchasing novaPDF printer (http://www.novapdf.com)

Page 8: IBM WAS enablement about JVM for BPs

8SoftwareGroup WebSphereConfidential - Do Not Distribute

4. IBM JVM 의 Heap 구조

IBM JVM 은 이전부터 Oracle 과 다르게 Heap 을 구분하지 않고 single heap 구조를 사용하다가 IBM JVM 5.0 이후 부터 옵션을 통하여 Heap 영역의 구분 방식을 변경할 수 있는 방법을 제공합니다.

IBM JVM 이 사용하는 Heap 구조 (IBM JVM 1.4.2 이전)

IBM JVM 이 사용하는 Heap 구조 (IBM JVM 5.0 이후 – 기본 모드)

IBM JVM 이 사용하는 Heap 구조 (IBM JVM 5.0 이후 – gencon 모드)

Create PDF files without this message by purchasing novaPDF printer (http://www.novapdf.com)

Page 9: IBM WAS enablement about JVM for BPs

9SoftwareGroup WebSphereConfidential - Do Not Distribute

4. IBM JVM 의 Heap 구조

IBM JVM에서는 4가지 방식의 GC 방법을 제공하므로 원하는 목적에 맞는 GC 방식을 선택해서 사용할 수 있습니다. (이 GC 방식의 변경에 따라서 Heap 의 구조도 변경됨)

GC 정책 (-Xgcpolicy 옵션 이용)

항 목 설 명 비고

Optthruput 정책처리량은 높지만 GC 중간시간이 길다. GC 중 compaction 이 필요하면 mark, sweep, compaction 을 하기위한 모든 어플리케이션 thread 는 중지된다.

WAS v7 까지 기본값이며, 대부분의 어플리케이션은 이옵션으로도 충분한 성능을 낼 수있음.

Optavgpause 정책어플리케이션 실행과 함께 GC의 mark, sweep 단계를실행시킴으로써 GC 중단 시간을 줄인다. 이런 동시실행은 전반적인처리량에 작은 성능 영향을 야기할 수 있다.

Gencon 정책

IBM JVM 을 위하여 세대가 있는 GC를 사용한다.

세대의 개념은 GC 중단시간을 줄임으로써 높은 처리량을 달성하기위해 사용된다. 이러한 목적을 이루기 위하여 heap 을 new 와 old 부분으로 나눈다. 짧게 살아있는 객체가 new영역에서 빠르게 GC 되는 반면에 오랫동안 살아있는 객체는 old 공간으로 이동한다.

Java 5.0 이후 새로 도입된정책으로 짧은 주기의 객체사용의경우 성능상에 많은 이점이있습니다. (WAS v8 기본값)

Subpool 정책

보통 8 개 이상의 프로세스를 사용할 경우에 멀티프로세서시스템에서 성능을 향상시킬 수 있다. 이 정책은 IBM pSeries 와zSeries 에서만 사용가능하며 향상된 확장성과 객체 할당을 제공하기위하여 heap이 subpool 들로 나누어져 있다는 것만 제외하고는optthruput 정책과 비슷하다.

-> WAS v8 부터는 Balanced 정책으로 변경

Create PDF files without this message by purchasing novaPDF printer (http://www.novapdf.com)

Page 10: IBM WAS enablement about JVM for BPs

10SoftwareGroup WebSphereConfidential - Do Not Distribute

4. IBM JVM 의 Heap 구조

IBM JVM 은 WAS v8 부터 gencon 정책이 GC 기본 정책이 되었고 Oracle JVM Heap 과 비슷하면서도 다른구조를 가지게 되었습니다.

Oracle JVM Heap 구조와 비교

IBM JVM:-Xmn (-Xmns/-Xmnx)Sun:-XX:NewSize=nn-XX:MaxNewSize=nn-Xmn<size>

Sun JVM Only:-XX:MaxPermSize=nn

Nursery/Young Generation Tenured/Old Generation Permanent Space

JVM Heap

IBM JVM:-Xmo (-Xmos/-Xmox)Sun:-XX:NewRatio=n

각 JVM 지원 운영체제- IBM JVMs – Windows, AIX, Linux(x86 and PPC), i5/OS, z/OS- Oracle HotSpot based JVMs

> Oracle HotSpot JVM on Solaris > HP’s JVM for HP-UX

Create PDF files without this message by purchasing novaPDF printer (http://www.novapdf.com)

Page 11: IBM WAS enablement about JVM for BPs

11SoftwareGroup WebSphereConfidential - Do Not Distribute

4. IBM JVM 의 Heap 구조

IBM JVM 5.0 버전이후로 pCluster, kCluster 가 없어지는 대신에 해당 영역에 자리잡던 것들이 native 영역에위치하게 됩니다.

Java Object 연관된 Native 자원

Thread objects Native Thread

AWT objects Widgets/Shells

Socket objects Native Socket

Class objects Class structure, Constant Pool, Method Table, Method Blocks, Compiled Code

Class Loader Class cache

Constraint Table

Java Objects 들의 underpin(토대,지지) 을 위한 자원

Class Object 의 native heap 사용

Create PDF files without this message by purchasing novaPDF printer (http://www.novapdf.com)

Page 12: IBM WAS enablement about JVM for BPs

12SoftwareGroup WebSphereConfidential - Do Not Distribute

Classloader

Create PDF files without this message by purchasing novaPDF printer (http://www.novapdf.com)

Page 13: IBM WAS enablement about JVM for BPs

13SoftwareGroup WebSphereConfidential - Do Not Distribute

5. Classloader

Classloader 는 JVM 에서 런타임 때 클래스 파일을 찾고 로딩하는 역할을 담당합니다.

Classloader 의 Class loading 순서

Classloader 의 규칙

① 클래스는 Classloader 를 통해서 단 한번만 올라갑니다.

② 클래스는 클래스 이름으로 구분되는 것이 아니라 식별자(fully qualified class name)로 구분됩니다.

③ Classloader 는 보통 계층적 구조를 가지고 있으며 마마보이(?) 입니다.

④ 클래스 로더는 자기 부모 밖에 직접 볼 수 없습니다.

⑤ 클래스는 실제 사용될 경우에만 그 시점에 클래스 로더를 통해서 올라갑니다.

Java 의 기본 Classloader 위임 구조

Create PDF files without this message by purchasing novaPDF printer (http://www.novapdf.com)

Page 14: IBM WAS enablement about JVM for BPs

14SoftwareGroup WebSphereConfidential - Do Not Distribute

6. IBM WAS 의 Classloader

IBM WAS 는 자바의 JVM 을 기반으로 구성되어 지며 자바는 실질적으로 모든 class 를 classloader 에 올려서 동작시키므로 동적 변경에 따른 적용에서 가장 큰 이슈는 JVM 의 classloder 구조이다. 보통 클래스를 변경하거나 추가하면 해당하는 부분의classloder 가 다시 시작 되어 변경 부분이 메모리에 리로드 되어야만 한다.

① JVM에 의해서 생성되는 bootstrap 과 extensions, applicationclass loaders (Java class loaders)

- JVM 을 위한 기본적인 class loader 로서 보통 jre/lib, jre/lib/ext, CLASSPATH 설정에 잡혀져 있는 class 들이 JVM 시작시 호출되어생성됩니다.

- 특히, WAS 제품에 J2EE API를 제공하기 위한 j2ee.jar 파일이로드된다.

② WebSphere extensions class loader

- 런타임에 필요한 WebSphere Application Server class 를 로드

- ws.ext.dirs 라는 시스템 속성에서 지정된 경로의 class 들을 로드하며 보통 3rd party code 와 JDBC Driver 등이 로드 된다.

③ 서버에서 실행 중인 엔터프라이즈 어플리케이션 요소를 로드 하는하나 이상의 application class loader

- 응용프로그램 요소 : 웹 모듈, EJB(엔터프라이즈 Bean) 모듈, RAR 파일(자원 어댑터 아카이브) 및 종속성 JAR 파일

- 엔터프라이즈 어플리케이션의 class 및 JAR 파일을 로드 하기 위한J2EE class 로딩 규칙 준수

- 공유 라이브러리를 application 과 연관 시킬 수 있다.

④ WAR class loader

- WEB-INF/classes 및 WEB-INF/lib 디렉토리의 목차를 로드

Create PDF files without this message by purchasing novaPDF printer (http://www.novapdf.com)

Page 15: IBM WAS enablement about JVM for BPs

15SoftwareGroup WebSphereConfidential - Do Not Distribute

6. IBM WAS 의 Classloader

IBM WAS 의 클래스 로더 구성은 정책 이나 옵션에 따라 다르게 구성할 수 있습니다.

Applicationclassloader 정책 - “multiple”

App1Web.war - “Module”classloader

App2Web.war - “Application”classloader

Create PDF files without this message by purchasing novaPDF printer (http://www.novapdf.com)

Page 16: IBM WAS enablement about JVM for BPs

16SoftwareGroup WebSphereConfidential - Do Not Distribute

6. IBM WAS 의 Classloader

IBM WAS 의 클래스 로더 구성은 정책 이나 옵션에 따라 다르게 구성할 수 있습니다.

Applicationclassloader 정책 - “single”

App1Web.war - “Module”classloader

App2Web.war - “Application”classloader

Create PDF files without this message by purchasing novaPDF printer (http://www.novapdf.com)

Page 17: IBM WAS enablement about JVM for BPs

17SoftwareGroup WebSphereConfidential - Do Not Distribute

6. IBM WAS 의 Classloader

IBM WAS 의 관리콘솔 메뉴에서 각 어플리케이션에 대한 응용프로그램 파일 갱신 시 클래스를 자동으로 다시 로드 하도록 구성 할 수 있습니다. (엔터프라이즈 응용프로그램 > 이름 > 클래스 로더)

※ 주의: 응용프로그램이 실행 중인 경우, 응용프로그램 설정을 변경하면 응용프로그램이 다시 시작될 수도 있다. 독립형 서버의 경우, 변경사항을 저장하면 응용프로그램이 다시 시작되며, 다중 서버 제품의 경우, 변경사항을저장하면 응용프로그램이 다시 시작되고 응용프로그램이 설치된 노드에서 파일이 동기화된다.

관리콘솔 해당 화면

Create PDF files without this message by purchasing novaPDF printer (http://www.novapdf.com)

Page 18: IBM WAS enablement about JVM for BPs

18SoftwareGroup WebSphereConfidential - Do Not Distribute

6. IBM WAS 의 Classloader

Classloader 의 정확한 관리와 문제 발생시의 빠른 해결를 위하여 IBM WAS 는 관리콘솔 내에 classloaderviewer 를 제공하여 관리콘솔에서 바로 Classloader 의 구조와 loading 된 class 를 확인할 수 있습니다.

관리콘솔 해당 메뉴 화면

Classloader viewer 화면

Create PDF files without this message by purchasing novaPDF printer (http://www.novapdf.com)

Page 19: IBM WAS enablement about JVM for BPs

19SoftwareGroup WebSphereConfidential - Do Not Distribute

6. IBM WAS 의 Classloader

Classloader 의 정확한 관리와 문제 발생시의 빠른 해결를 위하여 JVM 에서도 load 시점에 classloaer 에 load 되는 class 를 로깅할 수 있는 방안을 제공하고 있습니다. (-verbose:class 옵션으로 확인이 가능)

관리콘솔 해당 메뉴 화면

Classloading 관련 log 파일 – native_stderr.log

Create PDF files without this message by purchasing novaPDF printer (http://www.novapdf.com)

Page 20: IBM WAS enablement about JVM for BPs

20SoftwareGroup WebSphereConfidential - Do Not Distribute

End of The Document.End of The Document.

Create PDF files without this message by purchasing novaPDF printer (http://www.novapdf.com)