TIL

Chapter 8. GC 로깅, 모니터링, 튜닝, 툴

8.1 GC 로깅 개요

8.1.1 GC 로깅 켜기

-Xloggc:gc.log -XX:+PrintGCDetails -XX:+PrintTenuringDistribution
-XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps

| 플래그 | 작용 | | — | — | | -X:loggc:gc.log | GC 이벤트에 로깅할 파일을 지정 | | -XX:+PrintGCDetails | GC 이벤트 세부 정보를 로깅 | | -XX:+PrintTenuringDistribution | 툴링에 필요한, 부가적인 GC 이벤트 세부 정보 추가 | | -XX:+PrintGCTimeStamps | GC 이벤트 발생 시간을 (VM 시작 이후 경과한 시간을 초 단위로) 출력 | | -XX:+PrintGCDateStamps | GC 이벤트 발생 시간을 (벽시계 시간 기준) 출력 |

8.1.2 GC 로그 vs JMX

기본적인 힙 상태를 파악하는 용도로는 JMX가 제격이지만 깊이 있는 진단에서는 부족하다.

8.1.3 JMX의 단점

8.1.4 GC 로그 데이터의 장점

GC 로그는 핫스팟 JVM 내부에서 논블로킹 쓰기 매커니즘을 이용하여 남긴다. 애플리케이션 성능에 미치는 영향은 거의 0이므로 운영계는 무조건 켜두어야 한다.

8.2 로그 파싱 툴

스스로 GC 로그를 파싱하려고 하지 말고 반드시 툴을 사용할 것

8.2.1 센섬

8.2.2 GCViewer

8.3 GC 기본 튜닝

8.3.1 할당이란?

할당률을 수작업으로 계산하지 말고 툴을 써서 계산할 것

8.3.2 중단 시간이란?

동시 수집기를 사용할 경우 중단 시간 튜닝보단 할당률부터 줄여야 한다. 할당률이 낮아지면 동시 수집기에 가해지는 메모리압도 낮아지므로 수집 사이클이 스레드 할당 속도를 따라가기 쉬워진다. 또 CMF 이벤트 발생 확률이 감소한다.

8.3.3 수집기 스레드와 GC 루트

8.4 Parallel GC 튜닝

8.5 CMS 튜닝

백투백

CMS에서 STW

8.5.1 단편화로 인한 CMF

8.6 G1 튜닝