Amazon ECS에서 컨테이너 스왑 메모리 공간 관리

Amazon ECS에서 컨테이너 스왑 메모리 공간 관리

Amazon ECS를 사용하면 Linux 기반 Amazon EC2 인스턴스의 스왑 메모리 공간 사용을 컨테이너 수준에서 제어할 수 있어요. 컨테이너별 스왑 구성을 통해 각 컨테이너의 스왑을 활성화하거나 비활성화할 수 있어요.

출처: 문서

본문

Amazon ECS를 사용하면 Linux 기반 Amazon EC2 인스턴스의 스왑 메모리 공간 사용을 컨테이너 수준에서 제어할 수 있습니다. 컨테이너별 스왑 구성을 사용하면 작업 정의 내의 각 컨테이너에 대해 스왑을 활성화하거나 비활성화할 수 있습니다. 활성화된 컨테이너는 사용되는 최대 스왑 공간을 제한할 수 있습니다. 예를 들어, 지연 시간이 중요한 컨테이너는 스왑을 비활성화할 수 있습니다. 반대로 일시적 메모리 수요가 높은 컨테이너는 부하가 걸렸을 때 메모리 부족 오류의 가능성을 줄이기 위해 스왑을 켤 수 있습니다.

컨테이너의 스왑 구성은 다음 컨테이너 정의 매개변수로 관리됩니다.

  • maxSwap – 컨테이너가 사용할 수 있는 총 스왑 메모리 양(MiB)입니다. 이 매개변수는 docker run의 --memory-swap 옵션으로 변환되며, 그 값은 컨테이너 메모리와 maxSwap 값의 합입니다. maxSwap 값으로 0을 지정하면 컨테이너는 스왑을 사용하지 않습니다. 허용되는 값은 0 또는 양의 정수입니다. maxSwap 매개변수를 생략하면 컨테이너는 실행 중인 컨테이너 인스턴스의 스왑 구성을 사용합니다. swappiness 매개변수를 사용하려면 maxSwap 값을 설정해야 합니다.
  • swappiness – 컨테이너의 메모리 스와피니스 동작을 조정하는 데 사용할 수 있습니다. swappiness 값이 0이면 필요할 때까지 스와핑이 발생하지 않습니다. swappiness 값이 100이면 페이지가 적극적으로 스와핑됩니다. 허용되는 값은 0과 100 사이의 정수입니다. swappiness 매개변수를 지정하지 않으면 기본값 60이 사용됩니다. maxSwap에 값을 지정하지 않으면 이 매개변수는 무시됩니다. 이 매개변수는 docker run의 --memory-swappiness 옵션에 매핑됩니다.

다음 예시는 JSON 구문을 보여줍니다.

"containerDefinitions": [{
        ...
        "linuxParameters": {
            "maxSwap": integer,
            "swappiness": integer
        },
        ...
}]

고려 사항

컨테이너별 스왑 구성을 사용할 때 다음을 고려하세요.

  • 컨테이너가 사용하려면 작업을 호스팅하는 Amazon EC2 인스턴스에서 스왑 공간이 활성화되고 할당되어야 합니다. 기본적으로 Amazon ECS 최적화 AMI는 스왑이 활성화되어 있지 않습니다. 이 기능을 사용하려면 인스턴스에서 스왑을 활성화해야 합니다. 자세한 내용은 Amazon EC2 User Guide의 Instance Store Swap Volumes이나 How do I allocate memory to work as swap space in an Amazon EC2 instance?를 참고하세요.
  • 스왑 공간 컨테이너 정의 매개변수는 EC2를 지정하는 작업 정의에서만 지원됩니다. 이 매개변수는 Fargate의 Amazon ECS용으로만 만들어진 작업 정의에서는 지원되지 않습니다.
  • 이 기능은 Linux 컨테이너에서만 지원됩니다. Windows 컨테이너는 현재 지원되지 않습니다.
  • 작업 정의에서 maxSwap와 swappiness 컨테이너 정의 매개변수를 생략하면 각 컨테이너는 기본 swappiness 값 60을 갖습니다. 또한 총 스왑 사용은 컨테이너 메모리의 두 배로 제한됩니다.
  • Amazon Linux 2023에서 작업을 사용한다면 swappiness 매개변수는 지원되지 않습니다.

더 알아보기 (Learn more)