설명
메모리 제한이 없으면 하나의 컨테이너가 예상보다 많은 메모리를 사용해 같은 호스트의 다른 서비스까지 영향을 받을 수 있습니다.
특히 여러 서비스가 함께 동작하는 환경에서는 메모리 상한선을 명확히 두는 것이 중요합니다. 개발 환경에서는 괜찮아 보여도 운영 환경에서는 작은 누수 하나가 전체 장애로 이어질 수 있습니다.
잠재적 영향
- 특정 컨테이너가 메모리를 과도하게 사용해 다른 서비스까지 느려질 수 있습니다.
- 메모리 부족으로 호스트 전체가 불안정해질 수 있습니다.
- 장애가 여러 컨테이너로 동시에 번질 가능성이 커집니다.
해결 방법
deploy.resources.limits.memory또는 운영 환경에서 지원하는mem_limit을 명시하고 실제 적용을 확인하세요. 둘을 함께 쓰면 같은 값으로 맞추세요.- 예약값과 제한값을 함께 검토해 서비스 특성에 맞는 자원 계획을 세우세요.
- 실제 사용량을 모니터링해 너무 낮거나 과도한 제한이 없는지 주기적으로 조정하세요. 제한이 너무 낮으면 메모리 할당 실패나 프로세스 종료가 발생할 수 있습니다.
예시
사용하는 Compose 구현이 deploy 자원 제한을 적용하는지 확인하세요. 256M은 예시이므로 서비스의 실제 메모리 요구량에 맞게 조정하세요.
변경 전
yaml
services:
zapzop:
image: openzapzop/zapzop
deploy:
resources:
limits:
cpus: "0.3"
변경 후
yaml
services:
zapzop:
image: openzapzop/zapzop
deploy:
resources:
limits:
cpus: "0.3"
memory: 256M
설명:
- 변경 전: CPU 제한은 있지만 이 구성에 메모리 상한은 없습니다.
- 변경 후: 메모리 제한을 함께 설정해 한 컨테이너의 과사용이 다른 서비스에 미치는 영향을 줄입니다.