컨테이너 메모리 제한 점검

서비스별 메모리 상한을 설정하고 실제 적용과 사용량을 확인하세요.

설명

메모리 제한이 없으면 하나의 컨테이너가 예상보다 많은 메모리를 사용해 같은 호스트의 다른 서비스까지 영향을 받을 수 있습니다.

특히 여러 서비스가 함께 동작하는 환경에서는 메모리 상한선을 명확히 두는 것이 중요합니다. 개발 환경에서는 괜찮아 보여도 운영 환경에서는 작은 누수 하나가 전체 장애로 이어질 수 있습니다.

잠재적 영향

  • 특정 컨테이너가 메모리를 과도하게 사용해 다른 서비스까지 느려질 수 있습니다.
  • 메모리 부족으로 호스트 전체가 불안정해질 수 있습니다.
  • 장애가 여러 컨테이너로 동시에 번질 가능성이 커집니다.

해결 방법

  • 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 제한은 있지만 이 구성에 메모리 상한은 없습니다.
  • 변경 후: 메모리 제한을 함께 설정해 한 컨테이너의 과사용이 다른 서비스에 미치는 영향을 줄입니다.

참조