"cgroups"
Control groups의 약자로
프로세스들이 사용할 수 있는 컴퓨팅 자원들을 제한하고 격리시킬 수 있는
리눅스 커널의 막강한 기능이다.
지난번 포스팅에서 작성한 namespace와 함께
컨테이너 기술의 기반이 되는 중요한 기능이다.
cgroups를 이용하게 되면 다음의 자원들을 제한 할 수 있다.
Memory
CPU
Network
Device
I/O
cgroups를 관리하는 방법에는 여러가지가 있다.
cgroup 파일 시스템에 직접 접근
cgmanager 이용
cgroup-tools 이용
이번 포스팅에서는
cgroup-tools을 이용해서 간단한 실습을 해보겠다.
먼저 cgroup-tools를 패키지 관리자를 이용하여 설치를 하면,
cgcreate와 cgdelete등의 명령어나 cgconfig.conf와 cgrules.conf 파일을 이용한
관리가 가능해진다.
1. cgroups생성 (CPU 제한용)
hwi@testcom:~$ sudo cgcreate -a hwi -g cpu:mycgroup hwi@testcom:~$ ls -al /sys/fs/cgroup/cpu/ | grep mycgroup drwxr-xr-x 2 hwi root 0 2월 19 20:08 mycgroup
mycgroup이라는 cpu를 제한 할 수 있는
cgroup을 생성하였다.
추가로, a옵션을 이용하여 hwi라는 사용자가 소유하도록 하였다.cgroup을 생성하게 되면 ,
/sys/fs/cgroup 디렉토리 내부에 제한하는 자원에 따라
각자의 디렉토리 내부에 새로 디렉토리가 생성되는 것을 확인할 수 있다.
2. CPU 제한하기
hwi@testcom:~$ stress -c 1 stress: info: [13503] dispatching hogs: 1 cpu, 0 io, 0 vm, 0 hdd hwi@testcom:~$ top PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 13504 hwi 20 0 7476 92 0 R 100 0.0 0:18.68 stress
CPU제한 차이를 확인하기 위해서
stress 명령어를 이용하여 과부하를 시켜보았다.
CPU를 100%까지 사용하는 것을 확인할 수 있다.hwi@testcom:~$ sudo cgset -r cpu.cfs_quota_us=30000 mycgroup hwi@testcom:~$ sudo cgexec -g cpu:mycgroup stress -c 1 stress: info: [14028] dispatching hogs: 1 cpu, 0 io, 0 vm, 0 hdd hwi@testcom:~$ top PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 14029 root 20 0 7476 92 0 R 29.9 0.0 0:22.70 stress
/sys/fs/cgroup/cpu/mycgroup 내부의 파일들을 수정해서
제한하는 정도를 쉽게 수정할 수 있지만.
cgset 명령어를 이용해서도 간편하게 제한할 수 있다.
cgset명령어를 이용하여 CPU사용량을 30%로 제한하고
cgexec 명령어를 통해서 mycgroup환경에서 다시 stress 명령어를 실행하였다.
CPU를 30%만 사용하고 있는 것을 확인할 수 있다.
3. cgroups 삭제
hwi@testcom:~$ sudo cgdelete cpu:mycgroup hwi@testcom:~$ ls -al /sys/fs/cgroup/cpu/ | grep mycgroup hwi@testcom:~$
만들었던 cgroups는 직접 디렉토리를 삭제해도 되고
cgdelete명령어를 통해서 쉽게 삭제할 수 있다.
이번 포스팅에서는 간단하게 CPU만을 제한했지만
여러 자원을 동시에 제한하거나,
cgget등의 명령어를 이용하여 여러가지 응용이 가능하다.
참고로, nice나 cpulimit을 이용한 CPU제한은
하나의 프로세스에 대해서만 제한 할 수 있지만,
cgroups을 사용하면 프로세스를 그룹지어 제한할 수 있다 .
그리고,
nice와 cpulimit은 CPU사용량만을 제한할 수 있지만
cgroups을 사용하면 cpushare속성을 조절하여
다른 프로세스의 자원을 제한할 수도 있다.
(더 디테일한 제한이 가능하다는 것!)
'개발 > Linux' 카테고리의 다른 글
우분투 블루투스 스피커 설정 (0) | 2018.09.09 |
---|---|
[Linux] 리눅스 복사&붙여넣기 (2) | 2018.03.06 |
APT 403에러 (0) | 2018.03.06 |
Route table (0) | 2018.02.20 |
Linux namespace (0) | 2018.02.17 |