[JVM] CMS Collector - GC Log
기본동작
1) Minor GC - 모든 어플리케이션 스레드를 멈춤
2) 동시 병렬 컬렉션 - Full GC 가 발생하지 않도록 백그라운드에서 GC
3) Full GC - 어쩔수 없는 경우 Full GC
CMS Collector Minor GC 동작 과정 요약
- Throughput Collector 와 동일
CMS Collector Minor GC Log
CMS Collector 동시 병렬 컬렉션 동작 과정 요약
CMS Collector 동시 병렬 컬렉션 GC Log
Step 1. Initial Mark
- 모든 어플리케이션 스레드가 멈춘다(Stop-the-world)
Step 2. Mark
- 어플리케이션 스레드를 멈추지 않는다(동시 병렬 실행)
- 아무런 정보가 없다. 단지 표시만 하는 단계
Step 3. Pre-clean
- 동시 병렬 실행
- 마찬가지로 정보가 없다
Step 4. Re-mark
- Stop-the-world 가 발생한다.
- 몇가지 단계로 구성된다. ( Abortable-preclean => Minor GC => Re-mark )
- Minor GC, Re-mark 단계에서 발생하는 연이은 중단현상을 피하게끔 설계되었다.
- 90.9초에 시작한 Abortable-preclean단계는 일부러 약 1.4초간 대기하여 Minor GC를 기다린다.
- Minor GC가 발생하면, 그 이후에 나머지 Re-mark단계를 진행한다
Step 5. Sweep
- 동시 병렬 실행
- 중간에 Minor GC에 의해 Stop-the-world 발생 가능
- Minor GC는 언제든지 중간에 발생 가능
Step 6. Reset
- 더이상 사용하지 않는 객체는 이제 해제된다.
- 얼마나 많은 객체가 해제되었는지에 대한 로그는 없다
==> 확인하고 싶으면, 다음번에 발생하는 Minor GC 로그를 통해 확인해야 한다
CMS 동시 병렬 모드 실패 로그
1) Concurrent Mode Failure
- Minor GC => 올드 제너레이션 공간 부족
- Minor GC가 발생했는데, 올드 제너레이션 내에 늙은 객체들이 들어갈 공간이 없을 경우 CMS는 Full GC 를 수행한다
- 어플리케이션은 Full GC로 인해 5.62초 동안 중단되었다.
2) Promotion Failure
- CMS는 올드 제너레이션의 크기만 보고, 공간이 충분하다고 생각하고 Minor GC를 실행
( 공간이 충분하다고 생각하지 않으면, 위의 1번 상황 발생)
- 힙이 단편화되었기 때문에 승격 불가능
==> Full GC 발생, 28초 중단!!
3) PERM 공간 부족
- 그냥 이유없이 Full GC로그만 나타났을 경우
- Full GC 로그에, Perm 공간이 줄어들었을 경우
- 기본적으로 CMS는 PERM공간을 수집하지 않는다.
( 고급 설정 가능 )
- PERM이 가득차면 Full GC가 수행된다.
'JAVA > JVM' 카테고리의 다른 글
[JVM] G1 Collector - Full GC 발생하는 상황 (0) | 2021.12.16 |
---|---|
[JVM] G1 Collector - GC Log (0) | 2021.12.16 |
[JVM] CMS Collector - PERM 튜닝 (0) | 2021.12.16 |
[JVM] CMS Collector - 힙 사이즈 / Concurrent Mode 튜닝하기 (0) | 2021.12.16 |
[JVM] Throughput Collector - 힙 사이즈 튜닝하기 (0) | 2021.12.16 |
[JVM] Throughput Collector - GC Log (0) | 2021.12.16 |
[JVM] 기본 GC 튜닝 (0) | 2021.12.16 |
[JVM] GC 알고리즘 - Overview (0) | 2021.12.16 |