Docker는 CPU 제한을 하지 않으면
unlimited로 무제한으로 사용한다.
컨테이너에서 제한하면 이에 따라 cgroup이 리소스를 제공한다.
CPU Time Scheduling
CPU 사용시간 제어 - 기본값은 1024이다.
lscpu
위의 커맨드로 현재 hostos의 cpu를 확인할 수 있다.
docker run -d --name=cpu-1024 --cpu-shares=1024 leecloudo/stress:1.0 stress --cpu 4
docker run 할 떄 위 처럼 옵션을 주면,
cpu 작업 시간을 제한할 수 있다.
cpu register에 등록되어 제어가 된다.
위에처럼 stress로 부하테스트를 하면
이렇게 htop에서 cpu가 가득 차는 것을 확인할 수 있다.
student@hostos1:~$ ps -auxf | grep stress
student 14464 0.0 0.0 10524 2816 pts/0 S+ 09:39 0:00 | \_ grep --color=auto stress
root 14062 0.0 0.0 7488 1664 ? Ss 09:36 0:00 \_ stress --cpu 4
root 14081 69.3 0.0 7488 128 ? R 09:36 2:02 \_ stress --cpu 4
root 14082 68.4 0.0 7488 128 ? R 09:36 2:01 \_ stress --cpu 4
root 14083 75.4 0.0 7488 128 ? R 09:36 2:13 \_ stress --cpu 4
root 14084 70.9 0.0 7488 128 ? R 09:36 2:05 \_ stress --cpu 4
root 14227 0.0 0.0 7488 1664 ? Ss 09:37 0:00 \_ stress --cpu 4
root 14256 31.9 0.0 7488 128 ? R 09:37 0:29 \_ stress --cpu 4
root 14257 32.3 0.0 7488 128 ? R 09:37 0:29 \_ stress --cpu 4
root 14258 32.5 0.0 7488 128 ? R 09:37 0:29 \_ stress --cpu 4
root 14259 42.7 0.0 7488 128 ? R 09:37 0:38 \_ stress --cpu 4
CPU 번호 지정
docker run -d --name=cpuset1 --cpuset-cpus=0 leecloudo/stress:1.0 stress --cpu 1
#를 0 또는 0,3 또는 0-2
이런식으로 하나만 주거나 특정 번호만 주거나 범위를 주어
사용하고자 하는 cpu를 지정할 수 있다.
위에 처럼 부하테스트 하면 지정한 0번 cpu만 사용되는 것을 확인할 수 있다.
2개를 지정해도 똑같다.
docker run -d --name=cpuset2 --cpuset-cpus=0,3 leecloudo/stress:1.0 stress --cpu 2
CPU 사용 비율(%)
docker run --cpus=0.0
cpu 사용하고자 하는 비율을 특정할 수 있다.
아래에서 실제로 돌아가고 있는 컨테이너의 리소스를 수정할 수 있다. -> 이는 컨테이너가 프로세스 이기에 가능한 것이다.
docker update --cpus=0.2 cpuset1
'Cloud > Docker' 카테고리의 다른 글
Docker Architecture 그림으로 이해하기 (1) | 2024.04.09 |
---|