본문 바로가기
Docker/이론

[Docker] 7.Container 리소스 관리

by Haengsin 2021. 9. 7.

[컨테이너 하드웨어 리소스(CPU, Mem, Disk I/O) 제한]

- 기본적으로 컨테이너는 호스트 하드웨어 리소스의 사용 제한을 받지 않는다.

 

리소스를 제한하지 않으면 하나의 컨테이너가 모든 리소스를 사용할 수 있게 되고, 다른 컨테이너가 상대적으로 적은 리소스를 사용할 수 밖에 없게 된다.

 

docker run 과정에서 옵션을 통해 리소스를 제한할 수 있다.

 

(1) Memory 리소스 제한

- 제한 단위는 b, k, m, g 로 할당

옵션 의미
--memory, -m 컨테이너가 사용할 최대 메모리 양을 지정
--memory-swap 컨테이너가 사용할 스왑 메모리 영역에 대한 설정
메모리+스왑, 생략 시 메모리의 2배가 설정됨
--memory-reservation --memory 값보다 적은 값으로 구성하는 소프트 제한 값 설정
--oom-kill-disable OOM Killer가 프로세스 kill하지 못하도록 보호

$ docker run -d -m 512m nginx:1.14

$ docker run -d -m 1g --memory-reservation 500m nginx:1.14

$ docker run -d -m 200m --memory-swap 300m nginx:1.14 // 실제 mem=200m, swap=100m

$ docker run -d -m 200m --oom-kill-disable nginx:1.14

 

※ Memory swap : 시스템 메모리가 부족한 상황 등이 발생할 경우에 Disk를 메모리처럼 사용하는 것. 즉, swap 메모리가 사용되고 있다면 메모리가 full된 것을 의심해보아야 함.

 

※ OOM-Killer(Out Of Memory-Killer) : 리눅스 커널이 가지고 있는 기능 중에 Physical한 메모리 사이즈가 부족하게되면 리눅스 커널이 OOM-Killer를 동작시켜 프로세스(Virtual Memory를 많이 사용하는 프로세스 등)들을 Kill시키기 시작. 

※ --oom-kill-disable 옵션 : 메모리가 부족하더라도 해당 컨테이너를 Kill하지 말아라

 

 

(2) CPU 리소스 제한

옵션 의미
--cpus 컨테이너에 할당할 CPU Core수를 지정
--cpus=“1.5” 컨테이너가 최대 1.5개의 CPU 파워 사용 가능
--cpuset-cpus 컨테이너가 사용할 수 있는 CPU나 코어를 할당. Cpu index0부터.
--cpuset-cpus=0-4
--cpu-share 컨테이너가 사용하는 CPU 비중을 1024 값을 기반으로 설정
--cpu-share 2048 기본 값보다 두 배 많은 CPU 자원을 할당

$ docker run -d --cpus=".5" ubuntu:1.14

$ docker run -d --cpu-shares 2048 ubuntu:1.14

$ docker run -d --cpuset-cpus 0-3 ubuntu:1.14

 

--cpu-share 는 상대적 기준치이다. 모든 컨테이너는 실행될 때 cpu-share값 default를 1024값들을 가진다. 예를 들어, 512 값을 하나를 지정하면 다른 컨테이너에 비해 절반만 cpu를 할당한다.

 

(3) Block I/O 제한

옵션 의미
--blkio-weight
--blkio-weight-device
Block IO의 Quota를 설정할 수 있으며 100~1000까지 선택
default 500
--device-read-bps
--device-write-bps
특정 디바이스에 대한 읽기와 쓰기 작업의 초당 제한을 kb, mb, gb 단위로 설정
--device-read-iops
--device-write-iops
컨테이너의 read/write 속도의 Quota를 설정한다.
초당 quota를 제한해서 I/O를 발생시킴. 0 이상의 정수로 표기.
초당 데이터 전송량 = IOPS * 블럭크기(단위 데이터 용량)

$ docker run -it --rm --blkio-weight 100 ubuntu:latest /bin/bash

$ docker run -it --rm --device-write-bps /dev/vda:1mb ubuntu:latest /bin/bash

$ docker run -it --rm --deivce-write-bps /dev/vda:10mb ubuntu:latest /bin/bash

$ docker run -it --rm --device-write-iops /dev/vda:10 ubuntu:latest /bin/bash

$ docker run -it --rm --device-write-iops /dev/vda:100 ubuntu:latest /bin/bash

 

--blkio-weight-device 는 특정 디바이스에 대해서 block IO 의 Quota를 적용한다.

 

 

 

[컨테이너 사용 리소스를 확인하는 모니터링 툴]

각 컨테이너들이 실제로 얼마만큼의 리소스를 사용하고 있는 지 확인.

 

(1) docker monitoring commands

- docker stat : 실행 중인 컨테이너의 런타임 통계를 확인

  $ docker stats [OPTIONS] [CONTAINER...]

  $ docker stats -a

 

- docker event : 도커 호스트의 실시간 event 정보를 수집해서 출력

  $ docker events -f container=<NAME>

  $ docker image -f container=<NAME>

 

(2) cAdvisor

- https://github.com/google/cadvisor 

 

GitHub - google/cadvisor: Analyzes resource usage and performance characteristics of running containers.

Analyzes resource usage and performance characteristics of running containers. - GitHub - google/cadvisor: Analyzes resource usage and performance characteristics of running containers.

github.com

 

 

※ 이성미, [따배도] 도커 시리즈 , TTABAE-LEARN,https://www.youtube.com/watch?v=7HA_00KNtbc, 2021-09-09

'Docker > 이론' 카테고리의 다른 글

[Docker] 10. Docker-Compose (from build to operation)  (0) 2021.11.18
[Docker] 8.Container Storage  (0) 2021.09.23
[Docker] 5.Container 운영  (0) 2021.08.24
[Docker] 4.Container Registry  (0) 2021.08.12
[Docker] 3.Container(3)  (0) 2021.08.03