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]#