Java 애플리케이션에서 성능 문제의 많은 부분은 GC(Garbage Collection) 동작과 밀접한 관련이 있다. GC 로그를 통해 메모리 사용 상태를 파악하고, 튜닝 전략을 세워 시스템 안정성과 응답성을 높일 수 있다.
1. GC 로그 수집 설정
JVM 실행 시 다음 옵션을 통해 GC 로그를 수집할 수 있다:
-XX:+PrintGCDetails
-XX:+PrintGCDateStamps
-Xloggc:/var/log/gc.log
JDK 9 이상에서는 Unified Logging을 사용:
-Xlog:gc*:file=gc.log:tags,uptime,time,level
2. GC 로그 예시와 해석 (G1GC 기준)
2024-05-10T12:00:01.123+0000: 2.345: [GC pause (G1 Evacuation Pause) (young), 0.0456789 secs]
[Parallel Time: 42.3 ms, GC Workers: 4]
[Eden: 256M(256M)->0B(128M) Survivors: 32M->64M Heap: 1024M(2048M)->800M(2048M)]
주요 해석 포인트:
- GC 종류: Young GC (G1 Evacuation Pause)
- Pause Time: 0.045초 → GC로 인한 멈춤 시간
- Heap Before/After: 1024MB → 800MB (224MB 회수)
경고 신호:
- Full GC, to-space exhausted, Allocation Failure: 메모리 부족 가능성
- Pause Time이 1초 이상이면 사용자 체감 가능 → 튜닝 필요
3. GC 튜닝 전략
튜닝은 애플리케이션 특성과 사용 환경에 따라 다르며, 아래는 일반적인 방향성이다.
A. Heap 사이즈 조정
-Xms2g -Xmx4g # 초기값과 최대값 설정
- 너무 작으면 GC 반복 발생
- 너무 크면 Full GC 시 오히려 문제
B. G1GC 튜닝 옵션 예시
-XX:+UseG1GC
-XX:MaxGCPauseMillis=200 # 최대 멈춤 시간 설정 (ms)
-XX:InitiatingHeapOccupancyPercent=45 # Old GC 발생 기준
C. Throughput/Latency 목표에 따른 선택
목적 | 전략 |
최대 처리량 | ParallelGC, 큰 Heap, 낮은 Pause 예외 허용 |
짧은 응답 시간 | G1GC, ZGC, Heap 최소화, MaxGCPauseMillis 조절 |
4. 분석 도구 추천
- GCViewer: 시각화 기반 GC 로그 해석
- GCEasy.io: 웹 기반 분석 자동화 도구
- JClarity Censum: 상용 도구, 히트맵 분석 제공
'Back-End > Java & Spring' 카테고리의 다른 글
싱글톤 패턴 개념& Spring Bean Scope (0) | 2025.05.11 |
---|---|
Spring & Spring Boot에서 자주 쓰이는 디자인 패턴 정 (0) | 2025.05.11 |
Java GC 알고리즘 정리 (0) | 2025.05.10 |
CORS 오류 해결하기(Spring) (0) | 2025.03.02 |
Ubuntu에서 Spring Boot 애플리케이션 배포하기 – Git, Gradle, Tomcat을 활용 (0) | 2025.02.20 |