배경
- 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 |