Ⅰ. 가비지 컬렉션(Garbage Collection, GC) 이란?
WAS(Web Application Server)에서 메모리 관리를 자동으로 수행하는 핵심 메커니즘입니다. 동적으로 할당된 객체 중 더 이상 사용되지 않는 메모리를 자동으로 식별하고 해제함으로써 시스템의 안정성과 성능을 유지합니다. GC는 특히 JVM(Java Virtual Machine) 기반의 애플리케이션에서 중요한 역할을 하며, 수동 메모리 해제가 필요한 C/C++ 언어와 달리 자바에서는 GC가 이 작업을 자동으로 처리합니다.
Ⅱ. 가비지 컬렉션(Garbage Collection, GC) 작동 원리 및 핵심 개념
ⅰ. Stop-The-World(STW) 현상
GC가 수행될 때 JVM은 GC 관련 스레드를 제외한 모든 애플리케이션 스레드를 일시 중단(STW)시킵니다. 이 시간이 길어질수록 사용자 응답성이 저하되므로, GC 튜닝의 주요 목표 중 하나는 STW 시간을 최소화하는 것입니다.
ⅱ. Reachability 기반 수집 대상 판단
GC는 객체의 도달 가능성(Reachability) 을 기준으로 가비지 여부를 판단합니다. 루트 집합(Root Set)에서 참조 경로를 따라 도달 가능한 객체는 Reachable, 참조되지 않는 객체는 Unreachable로 간주되어 가비지로 처리됩니다.
ⅲ. GC 동작 방식: Mark and Sweep
1) Mark 단계: 유효한 객체를 식별
2) Sweep 단계: 사용되지 않는 객체를 제거
3) Compact 단계(선택적): 메모리 파편화를 줄이기 위해 객체를 정렬
Ⅲ. JVM Heap 메모리 구조
ⅰ. Young Generation
1) Eden 영역: 새로 생성된 객체가 할당되는 공간
2) Survivor 영역(S0, S1): Eden에서 살아남은 객체가 이동하는 공간
ⅱ. Old Generation
: Young 영역을 여러 번 통과한 장수 객체가 저장되는 공간
Ⅳ. 가비지 컬렉션(Garbage Collection, GC) 종류 및 알고리즘 비교
ⅰ. Minor GC vs Major (Full) GC
1) Minor GC: Young 영역에서 수행되며 속도가 빠르고 자주 발생
2) Major (Full) GC: Old 영역에서 수행되며 처리 시간이 길고 STW 시간이 증가함
ⅱ. 주요 GC 알고리즘
| 알고리즘명 | 설명 |
| Serial GC | 1) 단일 스레드로 작동 2) CPU가 제한적인 환경에 적합 3) -XX:+UseSerialGC 옵션 사용 |
| Parallel GC | 1) 다중 스레드로 GC 병렬 수행 2) Java 8의 기본 GC 3) -XX:+UseParallelGC 옵션 사용 |
| CMS (Concurrent Mark Sweep) GC | 1) STW 시간을 줄이기 위해 GC 작업을 병렬로 수행 2) Java 9에서 deprecated, Java 14에서 제거됨 |
| G1 (Garbage First) GC | 1) Java 9부터 기본 GC 2) Heap을 동일한 크기의 Region으로 나누어 관리 3) 대규모 Heap에서도 일관된 응답 시간 제공 4) -XX:+UseG1GC 옵션 사용 |
Ⅴ. 가비지 컬렉션(Garbage Collection, GC) 성능 최적화 전략
| 최적화 항목 | 설명 |
| 객체 생성 최소화 | 1) StringBuilder 또는 StringBuffer 활용 2) 불필요한 임시 객체 생성을 피함 |
| 힙 메모리 크기 조정 | 1) -Xms: 초기 힙 크기 2) -Xmx: 최대 힙 크기 일반적으로 두 값을 동일하게 설정하여 메모리 확장에 따른 비용 최소화 |
| Young/Old 비율 조정 | 1) -XX:NewRatio 옵션으로 Young과 Old 비율 조정 2) Old 영역으로 이동하는 객체 수를 최소화해 GC 부담 완화 |
Ⅵ. 가비지 컬렉션(Garbage Collection, GC) 모니터링 도구
WAS 운영 중 GC 상태를 실시간으로 파악하기 위한 주요 도구는 다음과 같습니다:
| 도구 이름 | 설명 |
| jstat -gcutil | GC 수행 횟수 및 시간 확인 |
| jmap -histo | 힙 메모리 내 객체 분포 확인 |
| jstack | 스레드 상태 및 덤프 분석 |
Ⅶ. 가비지 컬렉션(Garbage Collection, GC) 튜닝 기준
다음 조건을 만족하는 경우 별도의 GC 튜닝은 필요하지 않습니다:
ⅰ. Minor GC 처리 시간이 50ms 이내
ⅱ. Minor GC 주기가 10초 이하
ⅲ. Full GC 처리 시간이 1초 이내
ⅳ. Full GC 주기가 10분에 1회 이하
Ⅷ. 가비지 컬렉션(Garbage Collection, GC)가 WAS 성능에 미치는 영향
GC는 WAS 성능에 직결됩니다. 특히 Full GC가 발생할 경우 해당 컨테이너는 일시적으로 서비스를 처리하지 못하며, GC가 장시간 지속되면 다음과 같은 문제가 발생할 수 있습니다:
ⅰ. 응답 지연 및 타임아웃
ⅱ. DB 커넥션 풀 고갈
ⅲ. OutOfMemoryError
따라서 적절한 GC 알고리즘 선택, 메모리 구성 최적화, 그리고 지속적인 모니터링과 사전 조치는 안정적인 WAS 운영에 필수 요소입니다.
'어플리케이션' 카테고리의 다른 글
| 웹 소켓(Web Socket) 에 대해 알아보겠습니다. (1) | 2025.08.08 |
|---|---|
| HTTP(Hyper Text Transfer Protocol)에 대해 알아보겠습니다. (1) | 2025.08.04 |
| 자바 개발을 위한 SQL 매퍼 프레임워크인 MyBatis 에 대해 알아보겠습니다. (1) | 2025.07.07 |
| 큐싱(Qshing)에 대해 알아보겠습니다. (0) | 2025.06.25 |
| HTTP Flood 공격에 대해 알아보겠습니다. (0) | 2025.06.20 |