스택큐힙리스트

Java GC와 Stop-the-World 완전 정리 – 성능 병목의 실체 본문

개발

Java GC와 Stop-the-World 완전 정리 – 성능 병목의 실체

스택큐힙리스트 2025. 7. 10. 17:59
반응형

Java 애플리케이션을 운영하다 보면 "GC 때문에 서버가 멈췄다", "스탑더월드가 발생했다"는 말을 듣곤 합니다. 도대체 GC는 뭔지, 왜 프로그램이 멈추는 건지 궁금하지 않으셨나요? 이번 글에서는 Java의 Garbage Collection(가비지 컬렉션)Stop-the-World(스탑더월드) 개념을 쉽게 풀어 설명합니다.


✅ GC(Garbage Collection)란?

Java에서는 프로그래머가 메모리를 직접 해제하지 않아도 됩니다. 대신 JVM이 자동으로 사용되지 않는 객체를 찾아서 메모리에서 제거해주는 역할을 하는 것이 GC입니다.

즉,

"더 이상 참조되지 않는 객체들을 자동으로 청소해주는 기능"

GC 덕분에 Java는 메모리 누수를 줄이고, 메모리 관리를 자동화할 수 있습니다.


✅ GC는 언제 동작할까?

  • 힙(heap) 영역의 메모리가 부족해질 때
  • System.gc()를 호출했을 때 (JVM이 보장하지는 않음)
  • JVM이 필요하다고 판단할 때

✅ Stop-the-World란?

GC가 실행되는 동안, JVM은 모든 애플리케이션 스레드를 멈춥니다.
이 현상을 Stop-the-World라고 부릅니다.

즉,

"GC 작업이 끝날 때까지 애플리케이션 전체가 멈춘다"는 뜻입니다.

이 시간 동안 요청을 받지 못하거나, 응답이 지연될 수 있기 때문에 성능에 큰 영향을 줄 수 있습니다.


✅ 어떤 GC가 얼마나 멈출까?


 

GC 종류 Stop-the-World 발생 여부 특징
Serial GC 있음 단일 스레드, 간단하지만 STW 시간이 김
Parallel GC 있음 멀티스레드로 GC 수행, 성능 개선
CMS GC 있음 (짧음) STW 최소화 시도, 오래된 방식
G1 GC 있음 (짧고 예측 가능) 서버용 GC, 최근 JVM 기본값
ZGC / Shenandoah 거의 없음 초저지연 GC, 최신 고성능 JVM 대상

✅ 실무에서 문제 되는 상황

  • GC 튜닝이 안 된 서버에서 메모리 부족 시 Full GC가 자주 발생
  • 이때 Stop-the-World 시간이 수 초 이상이면, 사용자가 응답 지연을 체감
  • 서버의 CPU 사용률이 급락하거나 TPS가 떨어지면 GC 로그 확인 필요

✅ 해결 방법은?

  1. G1 GC, ZGC 등 최신 GC를 적용해 STW 시간 최소화
  2. 애플리케이션 메모리 할당 전략 개선 (객체 생성 최소화, 재사용)
  3. GC 로그 분석 도구 사용 (예: GC Easy, JClarity Censum)
  4. -Xms, -Xmx, -XX:+UseG1GC 등 JVM 옵션 튜닝
반응형
Comments