몽자비루 ㅣ 2024. 4. 30. 17:16
- 컨테이너 하드웨어 리소스 제한 방법
- 하드웨어 리소스란? 디스크, cpu, 메모리 등을 의미함.
- 컨테이너 하드웨어 리소스 제한 이유
- 기본적으로 컨테이너는 호스트 하드웨어 리소스의 사용 제한을 받지 않음.
- A컨테이너가 리소스를 많이 사용하게 되면, 다른 컨테이너에서는 리소스를 적게 사용할 수밖에 없음.
- 컨테이너가 필요로하는 만큼의 리소스만 할당.
- docker command를 통해 제한할 수 있는 리소스
- CPU
- Memory
- Disk I/O
- docker run --help
- Memory 리소스 제한
옵션 |
의미 |
--memory, -m |
컨테이너가 사용할 최대 메모리 양을 지정. |
--memory -swap |
컨테이너가 사용할 스왑 메모리 영역에 대한 설정. 메모리 + 스왑. 생략 시 메모리의 2배가 설정됨 |
--memory -reservation |
--memory 값보다 적은 값으로 구성하는 소프트 제한 값 설정 |
--oom -kill -disable |
OOM Killer가 프로세스 kill 하지 못하도록 보호 |
- 제한 단위는 b, k, m, g로 할당
- docker run -d -m 512m nginx:1.14
- nginx:1.14 컨테이너 최대 사용 메모리를 512mb 로 지정함
- docker run -d -m 1g --memory-reservation 500m nginx:1.14
- nginx:1.14 컨테이너 최대 사용 메모리를 1gb로 지정하고, 500mb는 보장받음
- docker run -d -m 200m --memory-swap 300m nginx:1.14
- nginx:1.14 컨테이너 최대 사용 메모리를 200mb로 지정하고, swap 메모리는 100mb (300-200)로 지정.
- --memory-swap 생략 시, 최대 사용 메모리 2배만큼이 swap 메모리로 지정됨
- docker run -d -m 200m --oom-kill-disable nginx:1.14
- linux 커널에서 메모리 사이즈 부족 시, out of memory killer 을 동작시켜 프로세스들을 kill함.
- --oom-kill-disable 옵션을 통해 메모리가 부족해도 kill 시키지 않음.
- CPU 리소스 제한
옵션 |
의미 |
--cpus |
컨테이너에 할당할 CPU core 개수를 지정 --cpus="1.5" : 컨테이너가 최대 1.5개의 CPU 파워 사용 가능 |
--cpuset-cpus |
컨테이너가 사용할 수 있는 CPU나 코어를 할당. cpu index 는 0부터 --cpus-cpus=0--4 |
--cpu-share |
컨테이너가 사용하는 CPU 비중을 1024 값을 기반으로 설정 --cpu-share 2048 : 기본값보다 2배 많은 CPU 자원을 할당. |
- docker run -d --cpus=".5" ubuntu:1.14
- docker run -d --cpu-shares 2048 ubuntu:1.14
- 모든 컨테이너는 기본으로 1024의 cpu sharebox 를 가지고 있음.
- 2048 컨테이너 할당 시, 다른 컨테이너에 비해 2배의 cpu 파워를 할당함. (상대적 가중치)
- docker run -d --cpuset-cpus 0-3 ubuntu:1.14
- 컨테이너가 0~3 사이의 CPU를 사용할 수 있음.
- 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를 제한해서 I/O를 발생시킴. 0 이상의 정수로 표기 초당 데이터 전송량 = IOPS * 블럭크기 (단위 데이터 용량) |
- docker run -it --rm --blkio-weight 100 ubuntu :latest /bin/bash
- 모든 컨테이너는 block I/O 가 default 500의 값을 가지고 있음.
- ubuntu :latest 컨테이너는 100의 Block I/O를 가짐 (상대적 가중치)
- docker run -it --rm --device-write-bps /dev/vda:1mb ubuntu:latest /bin/bash
- dev/vda에 저장할 때 쓰기 속도를 초당 1mb 로 지정
- docker run -it --rm --device-write-bps /dev/vda:10mb ubuntu:latest /bin/bash
- dev/vda에 저장할 때 쓰기 속도를 초당 10mb 로 지정
- docker run -it --rm --device-write-iops /dev/vda:10 ubuntu:latest /bin/bash
- ubuntu:latest 컨테이너의 쓰기 속도를 초당 1mb 로 지정
- docker run -it --rm --device-write-iops /dev/vda:100 ubuntu:latest /bin/bash
- ubuntu:latest 컨테이너의 쓰기 속도를 초당 10mb 로 지정
- 컨테이너 사용 리소스 확인 모니터링 툴
- docker monitoring commads
- docker stat : 실행중인 컨테이너의 런타임 통계를 확인
docker stats [옵션] [컨테이너]
- docker event : 도커 호스트의 실시간 event 정보를 수집하여 출력
docker events -f container=<MAME>
docker images -f container=<MAME>
- cAdvisor : https://github.com/google/cadvisor