JVM Heap 설정과 OOMKilled
데브옵스
JVM Heap 설정과 OOMKilled
두줄요약
Kubernetes Pod의 OOMKilled 원인을 Memory Limit만으로 보지 않고 JVM Heap 설정까지 함께 점검했습니다. MaxRAMPercentage를 낮추자 Full GC가 정상 동작하며 재시작 문제가 해소됐습니다.
문제 상황
- 선박 센서 데이터 이상치 탐지 일 배치 실행 중 Kubernetes Pod 재시작 반복
- OOMKilled 발생에도 Memory Limit 증설만으로는 문제 미해결
원인 분석
- 컨테이너 메모리 제한 초과로 인한 강제 종료
- JVM Heap 비율이 높아 Non-Heap과 Native 영역 여유 부족 가능성
- Heap이 커지며 Full GC 시점이 늦어지는 메모리 사용 패턴
해결 방법
-XX:MaxRAMPercentage=75를-XX:MaxRAMPercentage=60으로 조정- 배치 재실행과 Pod 상태 모니터링으로 재시작 여부 확인
- 애플리케이션 로그로 Full GC와 메모리 사용 변화 점검
적용해볼 점
- Kubernetes Java 서비스에서 Memory Limit과 JVM Heap 설정을 함께 점검
- OOMKilled 발생 시 Heap, Non-Heap, GC 동작을 같이 확인
