
데브옵스
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 동작을 같이 확인
