사용할 수있는 cpu 코어 갯수 확인
root@ubuntu-20-04:~# nproc
2
0번째 코어만 사용하고 1번째 코어는 사용하지 않을 거다.
docker run --cpuset-cpus=0 -it ubuntu:18.04 /bin/bash
다른 터미널에서 확인해보자.
sudo apt install -y htop
htop
첫 번째 터미널에서 실행한 도커 컨테이너에 부하를 줘보자.
다시 첫 번째 터미널로 돌아온다.
apt update && apt install sysbench htop
sysbench --test=cpu run
그리고 다시 두 번째 터미널에서 htop를 입력하여 코어 변화를 보자.
root@e01e3e8300db:/# sysbench --test=cpu --num-threads=3 run
1개만 사용하도록 애초에 도커 컨테이너를 제한하여 실행시켰기에 무시된다.
ls /sys/fs/cgroup/cpuset/docker/e01e3e8300db4f5d220ccaa94654776398f2b2f5946373b563fe5799994655d1
cgroup.clone_children cpuset.effective_mems cpuset.memory_spread_page notify_on_release
cgroup.procs cpuset.mem_exclusive cpuset.memory_spread_slab tasks
cpuset.cpu_exclusive cpuset.mem_hardwall cpuset.mems
cpuset.cpus cpuset.memory_migrate cpuset.sched_load_balance
cpuset.effective_cpus cpuset.memory_pressure cpuset.sched_relax_domain_level
여기서 e01e3e8300db4f5d220ccaa94654776398f2b2f5946373b563fe5799994655d1
는 도커 컨테이너 ID다.
cpuset.cpus 파일을 확인해보자.
e5799994655d1# cat cpuset.cpus
0
도커 컨테이너를 종료하고(exit)
exit
nproc
2
sysbench --test=cpu --num-threads=2 run
htop
메모리를 사용하는 파이썬 스크립트
f = open("/dev/urandom", "rb")
data = b""
i = 0
while 1:
data += f.read(10000000)
i += 1
print(f"{i*10}dmb")
메모리 제한 설정이 없으니 계속 올라가는 모습이다.
물리 메모리가 100MB에 스왑을 사용하지 않는 제한하기
(스왑 비활성화: 메모리 공간이 부족할 때 디스크 공간을 사용하는 설정을 해제하는 것임)
root@ubuntu-20-04:~# sudo docker run --memory=100M --memory-swappiness 0 -it ubuntu:18.04 /bin/bash
root@33f3a91888f0:/# apt update && apt install vim python
다시 mem_eater 스크립트를 만들어주고 실행한다.
root@33f3a91888f0:/# python mem_eater.py
10mb
20mb
30mb
40mb
50mb
60mb
70mb
80mb
Killed
4d0b3b41ff753# cd /sys/fs/cgroup/memory/docker/5bd10300d4eb74dbf6e867e57ebdcc1d96a214f1a319d0860c5
4d0b3b41ff753/
4d0b3b41ff753# cat memory.limit_in_bytes
104857600
우리가 제한한 100MB가 잘 적용 돼 있음을 알 수있다.
(1024 1024 100 = 104857600)