피드로 돌아가기
Dev.toDevOps
원문 읽기
Kubernetes OOMKilled 원인 분석 및 리소스 최적화 전략
OOMKilled in Kubernetes: Why Your Pods Die Without Warning (and How to Fix It)
AI 요약
Context
Container가 할당된 Memory Limit을 초과할 때 커널이 프로세스를 강제 종료하는 OOMKilled 현상 발생. Graceful Shutdown이나 상세 로그 없이 Pod가 즉시 재시작되는 특성으로 인해 근본 원인 파악에 어려움이 있음.
Technical Solution
- kubectl describe pod 명령을 통한 Last State 및 Terminated Reason 확인으로 OOMKilled 상태 식별
- Memory Requests와 Limits의 차등 설정을 통한 가용 자원 보장 및 최대 사용량 제한
- JVM 및 Python 등 런타임 특성에 맞춘 explicit tuning으로 Container Limit 인식 최적화
- In-memory 로딩 방식에서 Streaming 처리 방식으로의 전환을 통한 메모리 점유율 감소
- Prometheus 및 Metrics Server 기반의 실시간 모니터링 체계 구축으로 임계치 도달 전 사전 감지
실천 포인트
1. kubectl describe pod 결과에서 Reason: OOMKilled 여부 확인
2. Application 런타임의 메모리 관리 설정이 Kubernetes Limit과 일치하는지 검토
3. 대용량 데이터 처리 시 Loading 방식 대신 Streaming 인터페이스 적용 여부 점검
4. Prometheus 알람 설정을 통한 Memory Usage 임계치 사전 알림 구성