Akashic Records

VM 분석 : Chapter 2 VM의 구조와 튜닝 - 3 본문

오래된글/Articles

VM 분석 : Chapter 2 VM의 구조와 튜닝 - 3

Andrew's Akashic Records 2018. 4. 19. 14:46
728x90

PLT 2.4 GC 관련 파라미터


전체 Heap Size 조정 옵션

“-Xms: 초기 Heap 사이즈, –Xmx: 최대 Heap 사이즈”

예) –Xms512m –Xmx1024m

메모리 변화량이 큰 어플리케이션이 아니라면 이 min heap size와 max heap size는 동일하게 설정하는 것이 좋다. 일반적으로 IGB까지의 Heap을 설정하는 데에는 문제가 없으나, IGB가 넘는 대용량 메모리를 설정하고자 할 경우에는 별도의 JVM 옵션이 필요한 경우가 있다.


Perm Size 조정 옵션

“-XX:MaxPermSize=n”

예) –XX:MaxPermSize =128M

Perm Size는 Java 어플리케이션 자체가 로딩되는 영역이다. 디폴트로 설정된 Perm Size는 어플리케이션이 로딩 되기에 모자른 경우가 많다. 어플리케이션 가동 초기에 Out Of Memory 가 발생한다면 이 옵션을 사용하여 Perm Size을 조정해야 한다. 일반적으로 WAS에서는 64~256사이가 적당하다.


New 영역과 Old 영역의 조정

“-XX:NewRatio=n”

예) –XX:NewRatio=2 à New : Old == 1 : 2

JDK 1.4 버전에서는 “-XX:NewSize=128m”과 같이 직접 크기를 지정할 수 있다.


Suvivor 영역 조정 옵션

“-XX:SuvivorRatio=n”

예) –XX:SuvivorRatio=64 à survivor(2개) : Eden == 1 : 64

-

server, -client 옵션

“server”옵션은 서버용 어플리케이션에 최적화된 옵션으로 response time을 빠르게 하는데 집중된 옵션이다. 메모리 구조 또한 사용자가 지속적으로 서버를 하는 것이 아니기 때문에 사용자에 관련된 객체들이 오래 지속되는 경우가 드물다. 그래서 상대적으로 Old 영역이 작고 New영역이 크다.

“client” 옵션은 혼자 사용하는 어플리케이션에 최적화 되어있다. Response time 보다는 빨리 구동되는데 집중되어있고, 어플리케이션이 종료될 때까지 Old영역에 남아있는 객체의 비중이 크기 때문에 Old영역의 크기가 크다.


메모리 영역 설정 표

아래는 어플리케이션이 동적 페이지들로 작성되어 있고 어플리케이션 처리에 필요한 New 영역 위주로 메모리가 튜닝된 옵션 이다.

메모리 영역


Size

설정

New 영역

Eden

534M

-Xms1024m –Xmx1024m

-XX:PermSize=128m

-XX:MaxPermSize=128m

-XX:NewSize=800m

-XX:MaxNewSize=800m

-XX:SurvivorRatio=4


From

133M



To

133M


Old 영역


224M


Perm 영역


128M


총 Heap Size


1052



PLT 2.5 GC 튜닝


STEP 1 : 어플리케이션의 종류와 튜닝 목표값을 결정

JVM 튜닝의 목표를 설정한다. 메모리를 적게 쓰는 것이 목적인지, GC 횟수를 줄이는 것이 목적인지, GC 소요 시간을 줄이는 것이 목적 인지.


STEP 2 : Heap Size와 Perm Size를 설정한다.

- Xms, -Xmx 로 Heap Size을 정한다. 일반적으로 Sever 어플리케이션인 경우 초기와 최대 값을 동일하게 준다. Perm Size는 64~256m 사이로 지정한다.


STEP 3 : 테스트 및 로그 분석

GC로그를 수집하여 내용을 분석한다.

- Full GC가 길게 일어나 Full GC에 수행되는 시간을 줄이고자 한다면 Old 영역을 줄이면Full GC가 일어나는 횟수는 늘어나고, 반대로 Full GC가 일어나는 시간은 줄어든다.

- 서버 어플리케이션에서 Full GC를 적게 일어나게 하고, Full GC 시간을 양쪽다 줄이기 위해서는 Old영역을 적게 한후에, 여러 개의 instance를 동시에 구동해 로드 발란싱을 해주면 로드가 분산되기 때문에 Full GC의 횟수와 시간을 줄일 수 있다.


STEP 4 : Parameter 변경

테스트 및 로그 분석으로 다시 New, Old ,Perm 영역을 조정한다. 가장 중요한 것은 Old영역과 New 영역의 비율을 어떻게 조정하는가 이다.

향상포인트

GC 알고리즘


Performance 중시

Parallel GC

JVM 1.4.2 이상 4CPU 이상

Responsiveness(응답성) 중시

Concurrent GC

JVM 1.4.2 이상 4CPU 이상

Responsiveness(응답성) 중시

Incremental GC

JVM 1.4.2 이하 또는 4CPU 미만

일반

Default GC

JVM 1.4.2 이하 또는 4CPU 미만



728x90
Comments