이것저것 배운것/JAVA 공부중

JVM Option

RuDas 2014. 1. 20. 21:19

JVM Option 지정하기.

1. Standard Option


-client : Desktop용 애플리케이션을 구동하는데 유리

          성능최적화에 필요한 모든 과정을 최대한으로 수행


-server : Server용 애플리케이션을 구동하는데 유리

          시작시간은 느리나, 일정 시간이 흐르면 클라이언트보다 우수하다.

 

-d32    : 32bit JVM을 사용한다. 메모리를 최대 2G까지만 사용가능하다

          일반적 수행은 64bit JVM보다 뛰어난 경우가 많아 64bit 라고 해도 자주 사용.

 

-d64    : 64bit JVM을 사용한다. 메모리 크기에는 사실상 제한이 없다.

          대형 애플리케이션의 경우 자주 이용.

 

2. -X 옵션 (Non-Standard Option)


-Xms    : Java Heap의 최초크기를 지정.

          크기의 동적인 변경에 의한 오버헤드를 최소화 하려면 최대크기와 동일하게 부여할것.

 

-Xmx : Java Heap의 최대 크기를 지정.


3. -XX 옵션 (Non-Standard Option)

-XX옵션중 Boolean 유형은 접두어로 '+'일경우 활성화(Enable) '-'일 경우 비활성화(Disable)


-XX:+CMSIncrementalMode (Default: False)

Full GC작업을 Incremental하게 진행

이 옵션이 활성화 되면 Old Generation의 사용률과 무관하게 백그라운드에서 점진적으로 Old Generation에 대한 GC 작업을 수행한다.

이 옵션을 활성화하면 Throughput은 다소 줄어들고, Response Time은 좀 개선되는 경향이 있다.

따라서 GC 작업 Pause를 더 줄이고 싶을 경우에 사용할 수 있다.


-XX:CMSInitiationOccupancyFraction=<value> (Default: -1)

CMS Collection이 시작되는 임계값을 결정

만일 이 값이 "50"이면 Old Generation이 50% 이상 사용되면 Concurre Full GC가 시작된다.

임계값을 고정하고자 할때는 UseCMSInitiationOccupancyOnly 옵션을 활성화 해야한다.

이 옵션의 값이 작으면 CMS COllection이 그만큼 빨리 동작하기 때문에 Promotion Failure에 의한 Stop The World GC 작업이 발생할 확률이 그 만큼 줄어든다.


-XX:+CMSPermGenSweepingEnabled (Default: False)

CMS Collector는 기본적으로 Permanent Generation에 대해 Collection을 수행하지 않는다.

따라서 많은 클래스를 로딩하는 경우 Out Of Memory Error가 발생할 수 있다.

이 옵션을 활성화 하면 Permanent Generation에 대한 Collection을 수행한다.


-XX:+GCHeapFreeLimit=<Percentage> (Default: 5)

Parallel Collector를 사용할 때 GC도중 Out Of Memory Error의 발생을 방지하는데 도움을 준다.

GC로 확보해야 할 Free Space의 하한선을 결정.

이 값은 MAx Heap크기에 대한 Free 공간 크기의 비율이며 기본값은 "5"

적어도 Max Heap 크기의 5% 이상이 되도록 Free Space를 보장하는것.


-XX:GCTimeLimit=<Percentage> (Default: 90)

Parallel Collector를 사용할 때 GC GC도중 Out Of Memory Error의 발생을 방지하는데 도움을 준다.

전체 JVM수행 시간대비 Parallel Collection 수행시간의 상한선을 결정. 기본값은 90%

즉, Parallel Collection이 전체 수행 시간의 90%까지 사용할 수 있게 된다.


-XX:MinHeapFreeRatio=<value> (Default: 40)

Heap Expansion을 수행하는 임계치를 지정한다. 이 값이 40이면 Heap의 Free 공간이 40% 미만이 되면 Heap 크기가 확대된다.

MaxHeapFreeRatio옵션과 함께 Heap의 크기 조정을 담당한다.


-XX:MaxHeapFreeRatio=<Value> (Default: 70)

Heap Shrinkage를 수행하는 임계치를 지정. 이 값이 70이면 Heap의 Free 공간이 70% 이상이 되면 Heap 크기가 축소된다.

MinHeapFreeRatio옵션과 함께 Heap의 크기 조정을 담당한다.


-XX:NewSize=<Value> (Default: OS/JDK 버전마다 다름)

Young Generation의 시작크기를 지정한다.


-XX:MaxNewSize=<value> (Default: None)

Young Generation의 최대 크기를 지정한다.

Young Generation의 시작크기는 NewSize옵션에 의해 지정된다.


-XX:NewRatio=<value> (Default: OS/JDK 버전마다 다름)

Young Generation과 Old Generation의 비율을 결정한다.

이 값이 2 이면 Young:Old = 1:2가 되고. Young Generation의 크기는 전체 Java Heap 의 1/3이 된다.

Intel Client에서 12

기타 머신에서 8 이라고 레퍼런스에 되어있다고 한다.


-XX:ParallelGCThreads=<Value> (Default: CPU 개수)

Parallel Collector를 사용할 경우, GC작업을 수행할 스레드의 갯수를 지정한다.

기본값은 CPU의 개수.

하나의 머신에서 여러종류의 애플리케이션이 공유해서 사용하는 환경에서는 이 옵션의 값을 낮게 설정해서 GC 스레드의 개수를 줄임으로서 성능 개선을 꾀할수 있다.


-XX:Permsize=<size> (Default: )

Permanent Generation의 최초 크기를 지정한다.

이 크기가 작아서 클래스를 로딩하지 못하면 Out Of Memory Error가 발생


-XX:MaxPermSize=<Value>

Permanent Generation의 최대 크기를 지정한다.

크기를 크게 해주는것이 좋다.


-XX:SurvivorRatio=<Value> (Default: 5~6, but OS/JDK 버전 마다 다름)

Survivor Space크기가 크면 Tenured Generation으로 옮겨가기전의 중간 버퍼영역이 커진다.

따라서 Full GC의 빈도를 줄이는 역할을 할 수 있다.

반면 Eden Space의 크기가 줄어들므로 Minor GC가 자주 발생하게 된다.


-XX:+UseConcMarkSweepGC (Default: False)

CMS Collector를 사용할 지의 여부를 지정한다.

GC Pause에 의한 사용자 응답시간 저하 현상을 줄이고자 할 경우에 사용이 권장된다.


-XX:+UseParallelGC (Default: 환경에 따라 다름)

Parallel Collector를 사용할 지 여부를 지정.

JDK 1.5 부터는 서버급 머신인 경우 True 클라이언트급 머신일경우 False가 기본값

서버급 머신이란 CPU가 2개이상. 물리 RAM이 2G 이상인 머신.

큰 크기의 Young Generation이 일반적인 엔터프라이즈 환경에서는 Parallel Colector를 사용함으로서 Minor GC에 의한 GC Pause를 최소화 할 수 있다.

Parallel Collector는 Young Generation에 대해서만 작동한다.

따라서 Old Generation에 대해 Parallel Collector을 사용하고자 한다면 UseParallelOldGC옵션을 이용한다.


-XX:+UseParallelOldGC (Default: False)

Old Generation에 대해 Parallel Collection을 수행할지의 여부를 지정.


-XX:+UseParNewGC (Default: 환경에 따라 다름)

CMS Collector를 사용하는 경우에 한해서, Young Generation에 대해서 Parallel Collection을 시행할지의 여부를 지정한다.


-XX:+UseSerialGC (Default: 환경에 따라 다름)

Serial Collector를 사용할 지의 여부를 지정.

반응형