jvm과 톰캣 튜닝

20
CH09. JVM과 톰캣 튜닝 아꿈사 - 최문규

Upload: choi-mun-gyu

Post on 30-Jul-2015

122 views

Category:

Education


7 download

TRANSCRIPT

Page 1: JVM과 톰캣 튜닝

CH09. JVM과 톰캣 튜닝아꿈사 - 최문규

Page 2: JVM과 톰캣 튜닝

1. JVM튜닝

• JVM튜닝이라 쓰고 GC튜닝이라 읽는다.

• JVM이 작동하는데 있어, 메모리 구조와 GC(Garbage Collection)은 성능에 밀접한 관계

Page 3: JVM과 톰캣 튜닝

1.1 GC란 무엇인가?

• 사용하지 않는 메모리를 자동으로 거둬들이는 기능

• stop-the-world

• 클래스 인스턴스는 사용자 코드에 의해 명시적으로 생성되고 가비지 컬렉션에 의해 자동으로 파괴된다.

Page 4: JVM과 톰캣 튜닝

1.2 GC동작 방법

• JVM메모리 영역

Page 5: JVM과 톰캣 튜닝

메모리 구조• new/young

객체가 생성되지 마자 저장되는곳. 시간에 지남에 따라 old영역으로 이동

• oldnew/young영역에서 저장되었던 객체 중, 오래된 객체가 이동되어 저장

• permclass, method등의 코드가 저장되는 영역

Page 6: JVM과 톰캣 튜닝

GC알고리즘즘

• Minor GC

• Copy & Scavenge : eden, survivor영역

• Full GC

• Mark & Compact : old영역

Page 7: JVM과 톰캣 튜닝

다양한 GC알고리즘

• Default Collector

• Parallel GC for young generation

• Concurrent GC for old generation

• Incremental GC

Page 8: JVM과 톰캣 튜닝

Parallel GC

• JDK1.4부터는 Minor GC를 동시에 여러개의 스레드를 이요해 사용가능

• 4 cpu, 256M이상에서 성능 발휘?

• Low-pause(stop-the-world 최소화)Throughput(ASAP) 두 가지 방식을 사용

Page 9: JVM과 톰캣 튜닝

Concurrent GC• Full GC의 단점(stop-the-world)를 보완하기 위해

• Initial Mark : 활성화 객체 미리 찾기

• Concurrent Mark : 참조가 끊긴 객체 확인

• Concurrent Sweep : 정리 정리

Page 10: JVM과 톰캣 튜닝

Incremental GC

• Full GC에 의해서 발생하는 stop-the-world pause를 줄이자

• Minor GC가 일어날 때마다, old영역을 조금씩 GC해서자결과적으로 Full GC를 최소한으로 일어나게 만들자

Page 11: JVM과 톰캣 튜닝

GC로그 수집과 분석 방법• java -verbosegc

• java -XX:+PrintGCDetails

Page 12: JVM과 톰캣 튜닝

GC관련 파라미터• 전체 힙 크기 조정

-Xms1024M -Xmx1024M

• perm크기 조정 -XX:MaxPermSize

• new영역과 old영역의 크기 조정-XX:NewSize

• survivor영역 비율 조정 -XX:SurvivorRatio http://www.oracle.com/technetwork/java/javase/community/vmoptions-jsp-140102.html

• ref : http://www.oracle.com/technetwork/java/javase/community/vmoptions-jsp-140102.html

Page 13: JVM과 톰캣 튜닝

GC관련 파라미터• -server

• 어플리케이션 서버에 적합한 compiler최적화, 메모리구조

• new 영역 > old영역

• -client

• 클라이언트 어플리케이션에 적합한 compiler최적화, 메모리구조

• new영역 < old영역

Page 14: JVM과 톰캣 튜닝

JVM GC튜닝

1. 어플리케이션의 종류와 튜닝 목표 값 설정

2. 힙 크기와 perm크기 설정

3. 테스트와 로그분석

4. perm크기 조정

5. GC 수행시간 분석

6. 파라미터 변경

Page 15: JVM과 톰캣 튜닝

2. tomcat 튜닝

• 시나리오 : HTTP/JSON, REST형태로 API서버 L4스위치

Page 16: JVM과 톰캣 튜닝

server.xml튜닝

• Listener설정

• tomcat이 기동할 때, root로 실행금지

• 설정파일, 로그파일들이 루트권한으로 바뀌어서일반 계정으로 재 실행시, 권한 문제 발생

Page 17: JVM과 톰캣 튜닝

Connector설정

• acceptCount=“10”

• 큐의 길이를 정의

• 큐의 길이를 적당히 조절해, 요청을 처리 하지 못하는걸 빨리 알려주는 예외처리시

• enableLoopups=“false”

• http요청에 대한 IP를 조회하는 명령을 비활성

Page 18: JVM과 톰캣 튜닝

Connector설정

• maxConnection=“8192”

• tomcat가 사용가능한 FD(file descriptior) 수

• TIME_WAIT로 인한, socket close지연

• maxKeepAliveRequest=“1”

• keep alive연결 시, 최대 유지연결 갯수 지정

Page 19: JVM과 톰캣 튜닝

Connector설정

• maxThread=“100”

• tomcat내의 스레드 수를 설정한다.

Page 20: JVM과 톰캣 튜닝

2.5메모리 옵션

• 메모리 튜닝은 중요하다

• 힙크기는 최소 값, 최대 값을 같은 크기로 지정

• 힙 덤프옵션사용으로, out of memory발생시 해당 위치를 찾기 용이

• parallel GC + Concurrent GC

• GC로그 사용