본문 바로가기

Devops

Docker 컨테이너 메모리 관리 및 OOM 대응

배경

  • Dokcer로 패키징 , 배포 , 실행을 모두 담당하는 경우 컨테이너의 리소스를 한정하지 않으면
    container는 host의 모든 자원을 제한없이 사용하게됨 → OOM발생
  • 각 컨테이너는 격리된 환경에서 호스트의 자원을 사용하고 호스트와 커널로 연결되어 호스트의 os에 종속되고
    호스트 자원에 엑세스 하는데 이 때 컨테이너의 격리성이 오히려 자원의 무제한 점유와 타 컨테이너의 자원 점유를
    방해하는 원인이 되기도 한다.

상단의 사진은 컨테이너 3개를 각각 docker-compose로 구동시킨 상태에서 각 컨테이너가 점유하는 자원등을 확인하고 있는데

이 때 jenkins는 build pipeline을 수행하면 자원 점유량이 급격하게 높아지고 다른 컨테이너가 점유해야 하는 최소한의 자원량을

생각하지 않고 host의 자원을 모두 점유하려 하면서 각 컨테이너간 OOM이 발생한다.

해결 과정

  • docker-compose 의 경우 상단의 명령어 등으로 컨테이너의 리소스를 제한
    • swap_memory도 설정할 수 있으나 성능 저하로 이어질 수 있어 권장하지 않음
    • swap_memory는 디스크의 메모리를 가상화 시켜 사용하는것이기에 성능 저하가 발생하기 때문이다.

적용된 모습

  • 각 컨테이너가 사용할 수 있는 자원을 한정시켰기 때문에 자원을 독점적으로 사용하더라도 다른 컨테이너에 영향을 주지
    않아 더 이상 OOM이 발생하지 않는다.
  • 자원량 외에 cpu개수 코어 개수 또한 제한할 수 있으며 현재 회사에서 적용할땐 cpu개수또한 제한하여 적용했다.

'Devops' 카테고리의 다른 글

Argocd - Application CR 이해하기  (0) 2026.01.03
Iac- Terraform이란?  (0) 2025.12.13
Argocd - GitOps 활용하기(App of Apps 패턴)  (0) 2025.11.05
GitOps란? 2부: 정의와 원칙  (5) 2025.08.15
GitOps란? 1부: 왜 GitOps인가  (4) 2025.08.12