ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 컨테이너 자원 할당 제한
    BackEnd/docker 2022. 3. 12. 09:54
    반응형

      컨테이너를 생성하는 run, create 명령어에서 컨테이너의 자원 할당량을 조정하도록 옵션을 입력할 수 있습니다. 컨테이너에 자원 할당 옵션을 설정하지 않으면 호스트의 자원을 전부 점유해 다른 컨테이너들뿐 아니라 호스트 자체의 동작이 멈출 수도 있습니다.

     

      현재 컨테이너에 설정된 자원 제한을 확인하는 가장 쉬운 방법은 docker inspect 명령어를 입력하는 것입니다.

    $ docker inspect 컨테이너 이름

     

    Note. run 명령어에서 설정된 컨테이너의 자원 제한을 변경하려면 update 명령어를 사용합니다.

    $ docker update (변경할 자원 제한) (컨테이너 이름)
    
    $ docker update --cpuset-cpus=1 centos ubuntu

     

    컨테이너 메모리 제한

      docker run 명령어에 --memory를 지정해 컨테이너의 메모리를 제한할 수 있습니다. 입력할 수 있는 단위는 m(megabyte), g(gigabyte)이며 제한할 수 있는 최소 메모리는 4MB입니다. 다음 명령어는 컨테이너의 메모리 사용량을 1GB로 제한합니다. (기본적으로 컨테이너의 Swap 메모리는 메모리의 2배로 설정되지만, --memory-swap 옵션으로 지정할 수 있습니다.)

    $ docker run -d \
    --memory="1g"
    --name memory_1g \
    nginx

      컨테이너 내에서 동작하는 프로세스가 컨테이너에 할당된 메모리를 초과하면 컨테이너는 자동으로 종료되므로 애플리케이션에 따라 메모리를 적절하게 할당하는 것이 좋습니다.

     

    컨테이너 CPU 제한

    --cpu-shares

      --cpu-shares 옵션은 컨테이너에 가중치를 설정해 해당 컨테이너가 CPU를 상대적으로 얼마나 사용할 수 있는지를 나타냅니다. 시스템에 존재하는 CPU를 어느 비중만큼 나눠(share) 쓸 것인지를 명시하는 옵션입니다. --cpu-shares 옵션은 상대적인 값을 가집니다. 기본 값은 1024로, CPU 할당에서 1의 비중을 뜻합니다.

     

    --cpu-period, --cpu-quota

      컨테이너의 CFS(Completely Fair Scheduler) 주기는 기본적으로 100ms로 설정됩니다. --cpu-period의 값은 기본적으로 100000이며, 이는 100ms를 뜻합니다. --cpu-quota는 --cpu-period에 설정된 시간 중 CPU 스케줄링에 얼마나 할당할 것인지를 설정합니다. 즉, 컨테이너는 [--cpu-quota 값] / [--cpu-period 값]만큼 CPU 시간을 할당받습니다. 

     

    --cpus

      --cpus 옵션은 --cpu-period, --cpu-quota와 동일한 기능을 하지만 좀 더 직관적으로 CPU의 개수를 직접 지정한다는 점에서 다릅니다. 예를 들어, --cpus 옵션에 0.5를 설정하면 --cpu-period=100000, --cpu-quota=50000과 동일하게 컨테이너의 CPU를 제한할 수 있습니다.

     

    Note. 병렬 처리를 위해 CPU를 많이 소모하는 워크로드를 수행해야 한다면 --cpu-share, --cpus, --cpu-period, --cpu-quota 옵션보다는 --cpuset-cpus 옵션을 사용하는 것이 좋습니다. --cpuset-cpus 옵션을 사용하면 특정 컨테이너가 특정 CPU에서만 동작하는 CPU 친화성(Affinity)을 보장할 수 있고, CPU 캐시 미스 또는 컨텍스트 스위칭과 같이 성능을 하락시키는 요인을 최소화할 가능성이 높아지기 때문입니다.

     

    --cpuset-cpus

      호스트에 CPU가 여러 개 있을 때 --cpuset-cpus 옵션을 지정해 컨테이너가 특정 CPU만 사용하도록 설정할 수 있습니다.

    $ docker run -d --name cpuset_2 \
    --cpuset-cpus=2 \
    alicek106/stress

    Note. --cpuset-cpus="0,3"은 1, 4번째 CPU를, --cpuset-cpus="0-2"는 1, 2, 3번째 CPU를 사용하도록 설정합니다.

     

    Block I/O 제한

      컨테이너를 생성할 때 아무런 옵션도 설정하지 않으면 컨테이너 내부에서 파일을 읽고 쓰는 대역폭에 제한이 설정되지 않습니다. 하나의 컨테이너가 블록 입출력을 과도하게 사용하지 않게 설정하려면 run 명령어에서 --device-write-bps, --device-read-bps, --device-write-iops, --device-read-iops 옵션을 지정해 블록 입출력을 제한할 수 있습니다. 단, Direct I/O 경우에만 블록 입출력이 제한되며, Buffered I/O는 제한되지 않습니다. Block I/O를 제한하는 옵션은 [디바이스 이름]:[값] 형태로 설정해야 합니다. 아래 명령어로 컨테이너 생성 시 초당 쓰기 작업의 최대치가 1MB로 제한됩니다.

    $ docker run -it \
    --device-write-bps /dev/xvda:1mb \
    ubuntu:14.04
    반응형

    'BackEnd > docker' 카테고리의 다른 글

    이미지 배포(Image Deploy)  (0) 2022.03.15
    도커 이미지(Docker Image)  (0) 2022.03.15
    컨테이너 로깅(Container Logging)  (0) 2022.03.12
    도커 네트워크(Docker Network)  (0) 2022.03.09
    도커 볼륨(Docker Volume)  (0) 2022.03.06

    댓글

Designed by Tistory.