컨테이너에는 메모리, cpu 등 여러 자원들이 존재한다.
옵션을 넣지 않은 컨테이너에 inspect 명령어를 사용하여 컨테이너에 대한 스팩을 살펴보면 cpu 및 메모리 등 스팩이 정의 되어 있지 않다는 것을 알 수 있다. 자원들의 스팩을 정의하지 않고 생성하게 되면 제한 없이 호스트의 자원을 전부 사용하기 때문에 다른 서비스에도 영향을 미칠 수 있다.
따라서 자원의 스팩을 정의해준다면 보다 효율적으로 자원을 관리할 수 있으며 서버의 부하를 방지할 수 있음으로 사용하는 것을 권장한다.
MEMORY
sudo docker run -d \
--name memory_test_1 \
--memory="1g" \
nginx
--memory 옵션으로 메모리의 크기를 지정할 수 있으며 단위는 기가바이트(g), 메가바이트(m)이다.
4MB부터 가능하며 메모리 초과 시 자동으로 컨테이너가 종료된다.
--memory-swap으로 스왑 메모리 설정 또한 가능하다.
sudo docker inspect memory_test_1 | grep \"Memory\"
CPU
cpu 가중치 할당
--cpu-shares
sudo docker run -it \
--name option_cpu_share \
--cpu-shares 1024 \
ubuntu:14.04
--cpus
sudo docker run -it \
--name option_cpus \
--cpus 1 \
ubuntu:14.04
시스템의 cpu를 나누어 할당하는 옵션이다. 따라서 옵션에 설정한 값은 절대적인 값이 아닌 상대적인 값인 것이다.
아무런 정의도 하지 않았다면 기본적으로 1024가 설정되며 이는 cpu할당에서 1을 의미한다.
cpu 넘버 지정
sudo docker run -d \
--name test_cpuset_0 \
--cpuset-cpus=0 \
ubuntu:14.04
특정 cpu만 사용하고 싶다면 --cpuset-cpus 옵션을 사용하면 된다.0부터 시작하며 여러개의 cpu가 필요하다면 --cpuset-cpus="1,3"(2번과 4번), --cpuset-cpus="1-3"(2번~4번)을 사용하면 된다.
cpu 스케줄링 성능 설정(--cpu-period, --cpu-quota)
sudo docker run -d \
--name cpu_test_period \
--cpu-period=100000 \
--cpu-quota=25000 \
ubuntu:14.04
조금더 정확하게 cpu를 할당하고 싶을 때 사용한다.
cpu-period와 cpu-quota는 같이 사용해야 한다.
- cpu-period - CFS(Completely Fair Scheduler) 주기 설정(컨테이너는 기본적으로 100ms 설정되어 있음)
- cpu-quota - 설정된 시간 안에 할당할 시간 설정
위에 옵션을 읽어보면 유추할 수 있듯 "cpu-quota/cpu-period"만큼 cpu 시간을 할당받는다는 것을 알 수 있으며 이것은 성능을 의미한다.
따라서 cpu_test_period 컨테이너의 cpu는 100000/25000 임으로 기본적으로 설정된 컨테이너보다 1/4정도의 성능을 낸다
<100%성능>
sudo docker run -it \
--name cpu_test_100 \
ubuntu:14.04
cpu의 성능을 100%다 이용하는 컨테이너를 생성하였다.
sysbech --test=cpu run
컨테이너 내부에 진입 후 해당 명령어를 입력하여 성능을 테스트해보았더니 10000개의 프라임넘버를 계산하는데는 약 3초의 시간이 소요되었다.
<25%성능>
sudo docker run -it \
--name cpu_test_25 \
--cpu-period=100000 \
--cpu-quota=25000 \
ubuntu:14.04
기존의 1/4 성능을 내는 컨테이너를 생성하였다.
그 후 sysbench를 사용하여 성능을 테스트해보았다.
기존 컨테이너에 비해 약 4배의 시간이 소요된 것을 확인할 수 있다.
cpu 스케줄링 성능 설정(--cpus)
sudo docker run -it \
--name cpus_test \
--cpus=0.5 \
ubuntu:14.04
--cpu-period와 같은 개념이며 조금 더 직관적이다.
--cpus=0.5는 1/2정도의 성능을 사용한다는 것이다.
컨테이너 내부에 진입하여 sysbench를 사용하여 성능을 테스트해보았다.
위에 결과에서 알 수 있듯 약 2배의 시간이 소요된 것으로 확인된다.
'Docker' 카테고리의 다른 글
8.Docker 도커 데몬 인증 키 적용 (0) | 2024.07.18 |
---|---|
6. Docker 컨테이너 로깅 (0) | 2024.07.16 |
5. Docker 네트워크 (0) | 2024.07.09 |
4. Docker 볼륨 (0) | 2024.07.05 |
3. Docker 컨테이너 애플리케이션 (1) | 2024.07.02 |