hotamul의 개발 이야기

cgroup으로 pids.max 제한하기 본문

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

'etc.' 카테고리의 다른 글

Big data/event-driven Architecture  (0) 2023.03.17
tmpfs란 무엇일까?  (0) 2023.03.14
cgroup으로 CPU 제한하기  (1) 2023.03.14
python으로 sar 명령 실행하기  (0) 2023.03.12
sysstat, sar을 이용한 resource 모니터링  (0) 2023.03.12
Comments