Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Garbage Collection 김종선 2010.12.07
Garbage collection  (GC) is a form of automatic  memory management . It is a special case of resource management, in which...
Minor GC Full GC
Minor GC Full GC
GC 발생 후
Option  지정하기  <ul><li>단일값 </li></ul><ul><li>-server Option 과 같이 옵션을 지정하면 그 자체로  </li></ul><ul><li>의미를 지닌다 .  </li></ul><ul...
JVM_ARGS=“- Xss 1m  - Xms 512m   - Xmx 512m“ JVM_ARGS=&quot;$JVM_ARGS  - XX:PermSize =256m  - XX:MaxPermSize =256m&quot;
Description -Xmn<size> Young Generation 이 거주하는  New Space 의 크기를 지정한다 .  대개의 경우 이 옵션보다는  -XX:NewRatio  옵션이나  -XX:NewSize  옵...
JVM_ARGS=&quot;-J- server &quot;  JVM_ARGS=&quot;$JVM_ARGS - Xss 512k  - Xmn 128m - Xms 768m - Xmx 768m&quot; JVM_ARGS=&qu...
  Default Description -XX:+CMSClassUnloadingEnabled False CMS Collector 는  Permanent Generation 에 대해  GC  작업을 수행하지 않으며 , C...
  Default Description -XX:SurvivorRatio= <value> 5~6 Survivor Space 와  Eden Space 의 비율을 지정한다 .  만일 이 값이  6 이면 ,  To Surviv...
 
 
 
 
 
 
 
JVM_ARGS=&quot;-J- server &quot;  JVM_ARGS=&quot;$JVM_ARGS - Xss 512k  - Xmn 128m - Xms 768m - Xmx 768m&quot; JVM_ARGS=&qu...
 
Upcoming SlideShare
Loading in …5
×

Garbage Collection

2,362 views

Published on

Garbage Collection 옵션 적용에 대한 Case Study이다.

  • Be the first to comment

Garbage Collection

  1. 1. Garbage Collection 김종선 2010.12.07
  2. 2. Garbage collection (GC) is a form of automatic memory management . It is a special case of resource management, in which the limited resource being managed is memory.
  3. 3. Minor GC Full GC
  4. 4. Minor GC Full GC
  5. 5. GC 발생 후
  6. 6. Option 지정하기 <ul><li>단일값 </li></ul><ul><li>-server Option 과 같이 옵션을 지정하면 그 자체로 </li></ul><ul><li>의미를 지닌다 . </li></ul><ul><li>크기 (Size) </li></ul><ul><li>-Xmx768m 과 같이 크기 (K,M,G) 를 지정한다 . </li></ul><ul><li>숫자 (Int) </li></ul><ul><li>-XX:SurviorRatio=10 </li></ul><ul><li>문자열 (String) </li></ul><ul><li>-agentlib:hprof=cpu=samples </li></ul><ul><li>Boolean </li></ul><ul><li>-XX:+PrintGCDetails 혹은 -XX:-PrintGCDetails 와 </li></ul><ul><li>같이 +/- 를 이용해서 활성화 / 비활성 여부를 지정 </li></ul>
  7. 7. JVM_ARGS=“- Xss 1m - Xms 512m - Xmx 512m“ JVM_ARGS=&quot;$JVM_ARGS - XX:PermSize =256m - XX:MaxPermSize =256m&quot;
  8. 8. Description -Xmn<size> Young Generation 이 거주하는 New Space 의 크기를 지정한다 . 대개의 경우 이 옵션보다는 -XX:NewRatio 옵션이나 -XX:NewSize 옵션을 많이 사용한다 . -Xss<size> 개별 Thread 의 Stack Size 를 지정한다 . 대부분의 경우 기본값 (Default) 을 그대로 사용하는 것이 바람직하다 . 많은 수의 Thread 를 사용하는 Application 의 경우 Thread Stack 에 의한 메모리 요구량이 높아지며 이로 인해 Out Of Memory Error 가 발생할 수 있다 . -Xms<size> Java Heap 의 최초 크기 (Start Size) 를 지정한다 . Java Heap 은 -Xms 옵션으로 지정한 크기로 시작하며 최대 -Xmx 옵션으로 지정한 크기만큼 커진다 . -Xmx<size> Java Heap 의 최대 크기 (Maximum Size) 를 지정한다 . Java Heap 은 -Xms 옵션으로 지정한 크기로 시작하며 최대 -Xmx 옵션으로 지정한 크기만큼 커진다 .
  9. 9. JVM_ARGS=&quot;-J- server &quot; JVM_ARGS=&quot;$JVM_ARGS - Xss 512k - Xmn 128m - Xms 768m - Xmx 768m&quot; JVM_ARGS=&quot;$JVM_ARGS - XX:PermSize =128m - XX:MaxPermSize =128m&quot; JVM_ARGS=&quot;$JVM_ARGS - XX:SurvivorRatio =14 - XX:MaxTenuringThreshold =15 - XX:GCTimeRatio =19 -XX:+ DisableExplicitGC -XX:+ UseParNewGC -XX:+ CMSParallelRemarkEnabled -XX:+ UseConcMarkSweepGC -XX:+ UseCMSCompactAtFullCollection -XX:+ CMSClassUnloadingEnabled -XX:+ CMSPermGenSweepingEnabled - XX:CMSInitiatingOccupancyFraction =60 -XX:+PrintGCDetails -XX:+PrintGCTimeStamps“
  10. 10.   Default Description -XX:+CMSClassUnloadingEnabled False CMS Collector 는 Permanent Generation 에 대해 GC 작업을 수행하지 않으며 , Class 메타데이터에 대한 Unloading 작업 또한 수행하지 않는다 . 따라서 Application 의 특성상 많은 수의 Class 를 동적으로 생성하고 Loading 하는 경우에는 Permanent Generation 에서 Out Of Memory Error 가 발생할 수 있다 . 이런 경우에는 이 옵션과 함께 CMSPermGenSweepingEnabled 옵션을 사용해서 Permanent Generation 에 대한 GC 작업과 Class Unloading 작업을 활성화한다 . -XX:+CMSPermGenSweepingEnabled False CMS Collector 는 기본적으로 Permanent Generation 에 대해 Collection 을 수행하지 않는다 . 따라서 많은 수의 Class 를 Loading 하는 경우 Out Of Memory Error 가 발생할 수 있다 . 이 옵션을 활성화하면 Permanent Generation 에 대한 Collection 을 수행한다 . -XX:+DisableExplicitGC False System.gc 호출에 의한 Explicit GC 를 비활성화한다 . RMI 에 의한 Explicit GC 나 Application 에서의 Explicit GC 를 원천적으로 방지하고자 할 경우에 사용된다 . -XX:PermSize=<size>   Permanent Generation 의 최초 크기를 지정한다 . Permanent Generation 의 최대 크기는 MaxPermSize 옵션에 의해 지정된다 . 많은 수의 Class 를 로딩하는 Application 은 큰 크기의 Permanent Generation 을 필요로 한며 , Permanent Generation 의 크기가 작아서 Class 를 로딩하는 못하면 Out Of Memory Error 가 발생한다 .
  11. 11.   Default Description -XX:SurvivorRatio= <value> 5~6 Survivor Space 와 Eden Space 의 비율을 지정한다 . 만일 이 값이 6 이면 , To Survivor Ratio:From Survivor Ratio:Eden Space = 1:1:6 이 된다 . 즉 , 하나의 Survivor Space 의 크기가 Young Generation 의 1/8 이 된다 . Survivor Space 의 크기가 크면 Tenured Generation 으로 옮겨가지 전의 중간 버퍼 영역이 커지는 셈이다 . 따라서 Full GC 의 빈도를 줄이는 역할을 할 수 있다 . 반면 Eden Space 의 크기가 줄어들므로 Minor GC 가 자주 발생하게 된다 . -XX:+UseCMSCompactAtFullCollection True CMS Collector 에 의한 Concurrent GC 수행 시 Compaction 작업을 수행할 지의 여부를 지정한다 . 이 값이 True 이면 , Old Generation 의 Fragmentation 에 의해 Promotion Failure 가 발생할 때 Stop The World 방식의 Full GC 를 수행하며 Compaction 이 이루어진다 . JDK 1.4.2 부터는 True 가 Default 값이다 . -XX:+UseConcMarkSweepGC False CMS Collector 를 사용할 지의 여부를 지정한다 . GC Pause 에 의한 사용자 응답 시간 저하 현상을 줄이고자 할 경우에 사용이 권장된다 . -XX:+UseParNewGC CMS Collector 를 사용하는 경우에 한해서 , Young Generation 에 대해서 Parallel Collection 을 수행할 지의 여부를 지정한다 .
  12. 19. JVM_ARGS=&quot;-J- server &quot; JVM_ARGS=&quot;$JVM_ARGS - Xss 512k - Xmn 128m - Xms 768m - Xmx 768m&quot; JVM_ARGS=&quot;$JVM_ARGS - XX:PermSize =128m - XX:MaxPermSize =128m&quot; JVM_ARGS=&quot;$JVM_ARGS - XX:SurvivorRatio =14 - XX:MaxTenuringThreshold =15 - XX:GCTimeRatio =19 -XX:+ DisableExplicitGC -XX:+ UseParNewGC -XX:+ CMSParallelRemarkEnabled -XX:+ UseConcMarkSweepGC -XX:+ UseCMSCompactAtFullCollection -XX:+ CMSClassUnloadingEnabled -XX:+ CMSPermGenSweepingEnabled - XX:CMSInitiatingOccupancyFraction =60 -XX:+PrintGCDetails -XX:+PrintGCTimeStamps“

×