etc.
cgroup으로 pids.max 제한하기
hotamul
2023. 3. 14. 20:40
cgroup으로 CPU 제한하기에서 cgroup
을 이용해 CPU 사용량을 제한시켜 보았다.
이번에는 cgroup
을 이용해 Process 생성 개수를 제한하여 fork bomb에 대비할 수 있게 해보자.
Test를 진행하기 위한 cgroup
생성
$ sudo su
$ cd /sys/fs/cgroup/pids
$ mkdir ./mycgroup && cd ./mycgroup
$ ls
cgroup.clone_children cgroup.procs notify_on_release pids.current pids.events pids.max tasks
Process 생성 개수 제한
$ echo $$ > ./tasks
$ cat pids.max
max
$ echo 20 > pids.max
$ cat pids.max
20
Warning
echo $$ > tasks
를 하지 않으면 시스템을 reboot해야 할 수 있다. 반드시 현재 Process가 생성한 cgroup에 속하도록 해야 한다.
fork bomb
$ :(){ :|:& };:
bash: fork: retry: Resource temporarily unavailable
bash: fork: retry: Resource temporarily unavailable
bash: fork: retry: Resource temporarily unavailable
bash: fork: retry: Resource temporarily unavailable
bash: fork: retry: Resource temporarily unavailable
bash: fork: retry: Resource temporarily unavailable
bash: fork: retry: Resource temporarily unavailable
bash: fork: retry: Resource temporarily unavailable
bash: fork: retry: Resource temporarily unavailable
...
위 에러 메시지에서도 볼 수 있듯이 무한으로 process가 생성되는 것을 막은 것을 볼 수 있다.
(새로운 terminal로 접속...)
$ ps aux
...
root 64801 0.0 0.2 9080 2300 pts/19 S 11:47 0:00 bash
root 64802 0.0 0.2 9080 2300 pts/19 S 11:47 0:00 bash
root 64803 0.0 0.2 9080 2300 pts/19 S 11:47 0:00 bash
root 64821 0.0 0.2 9080 2084 pts/19 S 11:47 0:00 bash
root 64822 0.0 0.2 9080 2304 pts/19 S 11:47 0:00 bash
root 64825 0.0 0.2 9080 2304 pts/19 S 11:47 0:00 bash
root 64826 0.0 0.2 9080 2304 pts/19 S 11:47 0:00 bash
root 64827 0.0 0.2 9080 2304 pts/19 S 11:47 0:00 bash
root 64828 0.0 0.2 9080 2304 pts/19 S 11:47 0:00 bash
root 64829 0.0 0.2 9080 2304 pts/19 S 11:47 0:00 bash
root 64830 0.0 0.2 9080 2304 pts/19 S 11:47 0:00 bash
root 64831 0.0 0.2 9080 2304 pts/19 S 11:47 0:00 bash
root 64832 0.0 0.2 9080 2304 pts/19 S 11:47 0:00 bash
root 64833 0.0 0.2 9080 2304 pts/19 S 11:47 0:00 bash
root 64861 0.0 0.2 9080 2304 pts/19 S 11:47 0:00 bash
root 64862 0.0 0.2 9080 2304 pts/19 S 11:47 0:00 bash
root 64863 0.0 0.2 9080 2304 pts/19 S 11:47 0:00 bash
...
많은 process가 생성됨을 확인.
생성한 cgroup
제거
$ sudo cgdelete -g pids:mycgroup