Linux Admin-crgoup을 사용한 리소스 관리

cgroups 또는 Control Groups는 관리자가 서비스 및 그룹에 대한 시스템 리소스를 할당하거나 제한 할 수있는 Linux 커널의 기능입니다.

실행중인 활성 제어 그룹 을 나열하려면 다음 ps 명령을 사용할 수 있습니다.

[root@localhost]# ps xawf -eo pid,user,cgroup,args 
8362 root     -                            \_ [kworker/1:2] 
1 root        -                           /usr/lib/systemd/systemd --switched-
   root --system --    deserialize 21 
507 root     7:cpuacct,cpu:/system.slice  /usr/lib/systemd/systemd-journald 
527 root     7:cpuacct,cpu:/system.slice  /usr/sbin/lvmetad -f 
540 root     7:cpuacct,cpu:/system.slice  /usr/lib/systemd/systemd-udevd 
715 root     7:cpuacct,cpu:/system.slice  /sbin/auditd -n 
731 root     7:cpuacct,cpu:/system.slice   \_ /sbin/audispd 
734 root     7:cpuacct,cpu:/system.slice       \_ /usr/sbin/sedispatch 
737 polkitd  7:cpuacct,cpu:/system.slice  /usr/lib/polkit-1/polkitd --no-debug 
738 rtkit    6:memory:/system.slice/rtki  /usr/libexec/rtkit-daemon 
740 dbus     7:cpuacct,cpu:/system.slice  /bin/dbus-daemon --system --
   address=systemd: --nofork --nopidfile --systemd-activation

CentOS 6.X부터 리소스 관리는 systemd init 구현 으로 재정의되었습니다 . 서비스에 대한 리소스 관리를 생각할 때 중점을 두어야 할 주요 사항은 cgroup 입니다.cgroups기능성과 단순성 모두에서 체계적 으로 발전했습니다 .

리소스 관리에서 cgroup의 목표는-어떤 서비스도 시스템 전체를 다운시킬 수 없습니다. 또는 단일 서비스 프로세스 (아마도 잘못 작성된 PHP 스크립트)가 너무 많은 리소스를 소비하여 서버 기능을 손상시키지 않습니다.

cgroups 는 다음 자원에 대한 단위의 자원 제어를 허용합니다-

  • CPU − 다른 덜 집약적 인 작업만큼 중요하지 않은 CPU 집약적 인 작업 제한

  • Memory − 서비스가 사용할 수있는 메모리 양 제한

  • Disks − 디스크 I / O 제한

** CPU 시간 : **

CPU 우선 순위가 더 낮은 작업에는 사용자 지정 구성 CPU 슬라이스가있을 수 있습니다.

예를 들어 다음 두 서비스를 살펴 보겠습니다.

폴 라이트 CPU 서비스 1

[root@localhost]# systemctl cat polite.service 
# /etc/systemd/system/polite.service 
[Unit] 
Description = Polite service limits CPU Slice and Memory 
After=remote-fs.target nss-lookup.target

[Service] 
MemoryLimit = 1M 
ExecStart = /usr/bin/sha1sum /dev/zero 
ExecStop = /bin/kill -WINCH ${MAINPID} 
WantedBy=multi-user.target

# /etc/systemd/system/polite.service.d/50-CPUShares.conf 
[Service] 
CPUShares = 1024 
[root@localhost]#

이블 CPU 서비스 2

[root@localhost]# systemctl cat evil.service 
# /etc/systemd/system/evil.service 
[Unit] 
Description = I Eat You CPU 
After=remote-fs.target nss-lookup.target

[Service] 
ExecStart = /usr/bin/md5sum /dev/zero 
ExecStop = /bin/kill -WINCH ${MAINPID} 
WantedBy=multi-user.target

# /etc/systemd/system/evil.service.d/50-CPUShares.conf 
[Service] 
CPUShares = 1024 
[root@localhost]#

더 낮은 CPU 우선 순위를 사용하여 Polite Service를 설정해 보겠습니다.

systemctl set-property polite.service CPUShares = 20  
/system.slice/polite.service
1   70.5   124.0K        -        -  

/system.slice/evil.service
1   99.5   304.0K        -        -

보시다시피 정상적인 시스템 유휴 시간 동안 두 불량 프로세스 모두 여전히 CPU주기를 사용하고 있습니다. 그러나 더 적은 시간 분할을 갖는 세트는 더 적은 CPU 시간을 사용합니다. 이를 염두에두고 더 짧은 시간 분할을 사용하면 필수 작업이 시스템 리소스에 더 잘 액세스 할 수있는 방법을 알 수 있습니다.

각 리소스에 대한 서비스를 설정하기 위해 set-property 메소드는 다음 매개 변수를 정의합니다.

systemctl set-property name parameter=value

CPU 슬라이스 CPUShares
메모리 제한 MemoryLimit
소프트 메모리 제한 MemorySoftLimit
블록 IO 가중치 BlockIOWeight
블록 장치 제한 (/ volume / path에 지정됨) BlockIODeviceWeight
IO 읽기 BlockIOReadBandwidth
디스크 쓰기 IO BlockIOReadBandwidth

대부분의 경우 서비스는 CPU 사용 , 메모리 제한읽기 / 쓰기 IO에 의해 제한됩니다 .

각각을 변경 한 후 systemd를 다시로드하고 서비스를 다시 시작해야합니다.

systemctl set-property foo.service CPUShares = 250 
systemctl daemon-reload 
systemctl restart foo.service

CentOS Linux에서 CGroup 구성

CentOS Linux에서 사용자 지정 cgroup을 만들려면 먼저 서비스를 설치하고 구성해야합니다.

Step 1 − libcgroup을 설치합니다 (아직 설치되지 않은 경우).

[root@localhost]# yum install libcgroup 
Package libcgroup-0.41-11.el7.x86_64 already installed and latest version 
Nothing to do 
[root@localhost]#

보시다시피 기본적으로 CentOS 7에는 모든 설치 프로그램과 함께 libcgroup이 설치 되어 있습니다. 최소 설치 프로그램을 사용하려면 종속성과 함께 libcgroup 유틸리티 를 설치해야합니다 .

Step 2 − cgconfig 서비스를 시작하고 활성화합니다.

[root@localhost]# systemctl enable cgconfig 
Created symlink from /etc/systemd/system/sysinit.target.wants/cgconfig.service 
to /usr/lib/systemd/system/cgconfig.service. 
[root@localhost]# systemctl start cgconfig 
[root@localhost]# systemctl status cgconfig 
● cgconfig.service - Control Group configuration service 
Loaded: loaded (/usr/lib/systemd/system/cgconfig.service; enabled; vendor 
preset: disabled) 
Active: active (exited) since Mon 2017-01-23 02:51:42 EST; 1min 21s ago 
Main PID: 4692 (code=exited, status = 0/SUCCESS) 
Memory: 0B 
CGroup: /system.slice/cgconfig.service  

Jan 23 02:51:42 localhost.localdomain systemd[1]: Starting Control Group 
configuration service... 
Jan 23 02:51:42 localhost.localdomain systemd[1]: Started Control Group 
configuration service. 
[root@localhost]#