본문 바로가기
개발&프로그래밍

JVM GC 로그 분석 방법 (G1GC 패턴 해석 + 실전 예시) - G1GC 로그 읽는 법 완전 정복

by 재아군 2026. 2. 20.
반응형

안녕하세요! 재아군의 관찰인생 입니다.

운영 서버에서 응답 지연, CPU 스파이크, OutOfMemoryError
발생했다면 가장 먼저 확인해야 할 것이 바로 GC 로그입니다.


특히 요즘 Spring Boot + JDK 17 환경에서 기본값으로 많이 사용하는
G1GC는 로그 패턴을 이해하면 장애를 사전에 감지할 수 있습니다.

 


G1GC란?


다른 GC와의 비교


GC 동작 방식 장점 단점 추천 환경

 

Serial GC 단일 스레드 단순 서버 부적합 테스트
Parallel GC Throughput 중심 처리량 높음 Pause 길 수 있음 Batch
CMS Low Pause 실시간성 Deprecated 구버전
G1GC Region 기반 균형형 로그 해석 필요 대부분 서버
ZGC Low Latency 초저지연 메모리 요구 큼 대규모 트래픽

 

 

GC 로그 활성화 방법

JDK 11+

-XX:+UseG1GC
-Xlog:gc*:file=gc.log:time,uptime,level,tags

JDK 8

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

Young GC 로그 예시

[2.345s][info][gc] GC(5) Pause Young (Normal) (G1 Evacuation Pause) 256M->128M(512M) 15.678ms

 

해석                             

항목  의미
2.345s JVM 시작 후 경과 시간
GC(5) 5번째 GC
Pause Young Young 영역 GC
256M->128M GC 전/후 사용량
(512M) 전체 Heap
15.678ms Pause Time

 

정상 패턴: - 10~50ms 내외 - 일정 주기 반복 - Old 영역 급증 없음


Mixed GC 예시

[45.123s][info][gc] GC(23) Pause Young (Mixed) 380M->200M(512M) 32.456ms
  • Young + Old 일부 정리
  • Old 영역 증가 신호

Full GC 예시 (위험 신호)

[120.456s][info][gc] GC(78) Pause Full (G1 Compaction Pause) 490M->300M(512M) 1.245s

위험 포인트: - 1초 이상 Pause - Old 영역 포화 가능성 - Humongous 객체
의심


실전 시나리오

1. 응답 지연

  • Full GC 1초 이상
  • Old 90% 이상 점유

조치: - Heap 증가 - 캐시 정책 점검 - Heap Dump 분석


2. CPU 스파이크

  • Young GC 초당 2~3회
  • Pause 30~40ms 반복

조치: - 객체 생성 패턴 최적화 - Stream 과다 사용 점검


3. OOM 직전 패턴

  • GC 연속 발생
  • Heap 감소 거의 없음

조치:

jmap -dump:live,format=b,file=heap.hprof <pid>

Eclipse MAT 분석 권장


핵심 튜닝 옵션

-XX:MaxGCPauseMillis=200
-XX:InitiatingHeapOccupancyPercent=30
-XX:G1HeapRegionSize=8m

FAQ

Q. G1GC는 항상 최선인가요?
A. 대부분 서버 환경에 적합하지만 초저지연이면 ZGC 고려.

Q. Heap 크기 권장 기준은?
A. Peak 메모리의 1.3~1.5배.


GC 로그는 서버의 건강 진단서입니다. 패턴을 이해하면 장애를 예방할 수 있습니다.

 

2026.02.17 - [개발&프로그래밍] - [Gradle GC] 가비지 컬렉터 설정 방법 - 빌드 시간의 숨은 병목, GC 튜닝으로 9~20% 추가 개선

2026.02.17 - [개발&프로그래밍] - [JVM] [OutOfMemoryError 해결] - 원인 분석부터 완벽 해결까지 실전 가이드

반응형

댓글