Garbage Collection 튜닝
jstat으로 GC 상태를 모니터링하는 방법과 Young·Old·Metaspace 영역별 증상에 따른 GC 튜닝 기준을 힙 구조, 튜닝 흐름 그림과 함께 정리합니다.
jstat으로 GC 상태를 모니터링하는 방법과 Young·Old·Metaspace 영역별 증상에 따른 GC 튜닝 기준을 힙 구조, 튜닝 흐름 그림과 함께 정리합니다.
JVM 프로세스 메모리 구조와 GC가 등장한 배경, GC의 역할과 Mark·Sweep·Compact를 살펴보고, GC 선택과 튜닝이 중요한 이유, Ergonomics가 고르는 기본값과 Pause-Time·Throughput·Footprint 목표, GC 튜닝 순서를 정리합니다.
Serial GC의 GC 로그와 TLAB을 살펴보고, -Xmx·-Xms의 예약과 커밋, NewRatio·NewSize·SurvivorRatio로 generation 크기를 정하는 방법과 서버 애플리케이션 가이드라인을 정리합니다.
G1 GC를 디폴트 옵션과 MaxGCPauseMillis·-Xmx로 튜닝하는 방법과 heap 크기 조정, young generation 크기 옵션, young GC·mixed GC가 pause time 목표를 넘을 때의 대응, back to back GC, IHOP, full GC와 Sys 시간이 클 때의 해결책을 정리합니다.
ZGC의 특징과 generational ZGC로 바뀐 과정을 짧게 짚고, -Xmx·SoftMaxHeapSize, uncommit과 AlwaysPreTouch, OS large page 설정, ConcGCThreads 같은 ZGC 튜닝 옵션을 정리합니다.
class metadata가 저장되는 Metaspace가 chunk 단위로 관리되고 회수되는 방식, GC를 일으키는 High-Water Mark와 관련 옵션, 압축 클래스 포인터와 Compact Object Headers, Metaspace 로그 읽는 법을 정리합니다.