일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- Bruth Force
- django
- Vue.js
- 코테
- boj
- Back tracking
- DFS
- 알고리듬
- 모의SW역량테스트
- spring boot
- SQL
- JavaScript
- Python
- Priority Queue
- CSV
- hash table
- 시뮬레이션
- Data Structure
- aws
- SWEA
- 알고리즘
- GitHub
- 구현
- Algorithm
- 코딩테스트
- Trie
- BFS
- gpdb
- programmers
- Linked list
- Today
- Total
hotamul의 개발 이야기
cgroup으로 CPU 제한하기 본문
cgroup
이란?
cgroup
은 Linux 운영 체제에서 프로세스 그룹을 관리하는 기능이다. cgroup
은 Control Group의 줄임말로, 다수의 프로세스 그룹을 묶어서 리소스 제한, 우선순위 설정 등을 할 수 있도록 한다.
예를 들어, 여러 개의 웹 서버 프로세스가 있을 때, cgroup
을 사용하면 CPU, 메모리, 디스크 등 리소스를 공정하게 분배하거나 우선순위를 지정하여 특정 프로세스 그룹이 우선적으로 리소스를 할당 받도록 설정할 수 있다.
또한, cgroup
은 서버 가상화 기술인 컨테이너에서도 사용된다. 컨테이너는 cgroup
을 사용하여 호스트 운영 체제에서 가상화된 환경에서 독립된 프로세스 그룹을 생성하고 리소스를 관리하여, 컨테이너 간의 Resource Contention을 방지하고, 각각의 컨테이너가 안정적으로 동작할 수 있도록 한다.
stress
tool 설치
cgroup
을 이용해서 CPU 사용량을 제한해보자.
stress
는 리눅스에서 시스템의 안정성과 성능을 테스트하기 위한 도구로, 다양한 리소스 요구 사항을 시뮬레이션하여 리소스 사용량의 한계를 테스트할 수 있다.
테스트 하고자 하는 Linux OS는 Ubuntu이다.
$ cat /etc/*-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=20.04
DISTRIB_CODENAME=focal
DISTRIB_DESCRIPTION="Ubuntu 20.04.5 LTS"
NAME="Ubuntu"
...
먼저 stress
tool을 설치해보자
$ sudo apt install -y stress
root 계정으로 전환
$ sudo su
test용 cgroup
생성
$ cd /sys/fs/cgroup/cpu && mkdir utils $$ cd utils
$ ll
total 0
drwxr-xr-x 2 root root 0 Mar 13 14:45 ./
dr-xr-xr-x 7 root root 0 Mar 9 14:51 ../
-rw-r--r-- 1 root root 0 Mar 13 14:45 cgroup.clone_children
-rw-r--r-- 1 root root 0 Mar 13 14:45 cgroup.procs
-rw-r--r-- 1 root root 0 Mar 13 14:45 cpu.cfs_burst_us
-rw-r--r-- 1 root root 0 Mar 13 14:45 cpu.cfs_period_us
-rw-r--r-- 1 root root 0 Mar 13 14:45 cpu.cfs_quota_us
-rw-r--r-- 1 root root 0 Mar 13 14:45 cpu.idle
-rw-r--r-- 1 root root 0 Mar 13 14:45 cpu.shares
-r--r--r-- 1 root root 0 Mar 13 14:45 cpu.stat
-rw-r--r-- 1 root root 0 Mar 13 14:45 cpu.uclamp.max
-rw-r--r-- 1 root root 0 Mar 13 14:45 cpu.uclamp.min
-r--r--r-- 1 root root 0 Mar 13 14:45 cpuacct.stat
-rw-r--r-- 1 root root 0 Mar 13 14:45 cpuacct.usage
-r--r--r-- 1 root root 0 Mar 13 14:45 cpuacct.usage_all
-r--r--r-- 1 root root 0 Mar 13 14:45 cpuacct.usage_percpu
-r--r--r-- 1 root root 0 Mar 13 14:45 cpuacct.usage_percpu_sys
-r--r--r-- 1 root root 0 Mar 13 14:45 cpuacct.usage_percpu_user
-r--r--r-- 1 root root 0 Mar 13 14:45 cpuacct.usage_sys
-r--r--r-- 1 root root 0 Mar 13 14:45 cpuacct.usage_user
-rw-r--r-- 1 root root 0 Mar 13 14:45 notify_on_release
-rw-r--r-- 1 root root 0 Mar 13 14:45 tasks
/sys/fs/cgroup/cpu
에 디렉토리를 생성하면 자동으로 위와 같은 sudo file이 생성되는데 크기는 모두 0이다.
현재 process 생성한 cgroup
에 등록
echo $$
50249
$ echo $$ > tasks
CPU 10%로 제한
cpu.cfs_perios_us
: 100000 (default로 100ms)cpu.cfs_quota_us
: 10000 (10ms로 변경)
$ echo 10000 > cpu.cfs_quota_us
stress test 설정
$ stress -c 1
top
으로 CPU 사용량 확인
$ top
top - 15:08:00 up 4 days, 16 min, 0 users, load average:
Tasks: 117 total, 3 running, 114 sleeping, 0 stopped,
%Cpu(s): 17.9 us, 3.0 sy, 0.0 ni, 78.7 id, 0.3 wa, 0.0
MiB Mem : 966.2 total, 70.4 free, 372.3 used,
MiB Swap: 0.0 total, 0.0 free, 0.0 used.
PID USER PR NI VIRT RES SHR S %CPU
51291 root 20 0 3864 100 0 R 10.0
...
CPU 5%로 변경
cpu.cfs_perios_us
: 100000 (default로 100ms)cpu.cfs_quota_us
: 5000 (5ms로 변경)
$ echo 5000 > cpu.cfs_quota_us
top
으로 CPU 사용량 확인
$ top
top - 15:11:03 up 4 days, 19 min, 0 users, load average:
Tasks: 124 total, 2 running, 122 sleeping, 0 stopped,
%Cpu(s): 8.0 us, 1.7 sy, 0.0 ni, 90.0 id, 0.3 wa, 0.0
MiB Mem : 966.2 total, 65.0 free, 377.1 used,
MiB Swap: 0.0 total, 0.0 free, 0.0 used.
PID USER PR NI VIRT RES SHR S %CPU
51291 root 20 0 3864 100 0 R 5.0
...
'etc.' 카테고리의 다른 글
tmpfs란 무엇일까? (0) | 2023.03.14 |
---|---|
cgroup으로 pids.max 제한하기 (0) | 2023.03.14 |
python으로 sar 명령 실행하기 (0) | 2023.03.12 |
sysstat, sar을 이용한 resource 모니터링 (0) | 2023.03.12 |
cgroups을 이용한 메모리 동적 할당 (Facebook 사례 분석) (0) | 2023.03.11 |