Linux Admin - Zarządzanie zasobami z grupami zadanymi

cgroups lub Control Groups to funkcja jądra Linuksa, która umożliwia administratorowi przydzielanie lub ograniczanie zasobów systemowych dla usług, a także dla grup.

Aby wyświetlić listę aktywnych grup kontrolnych , możemy użyć następującego polecenia 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

Zarządzanie zasobami, począwszy od CentOS 6.X, zostało na nowo zdefiniowane dzięki implementacji inicjalizacji systemd . Myśląc o zarządzaniu zasobami dla usług, należy przede wszystkim skupić się na grupach cgroup .cgroupsrozwinęły się dzięki systemd zarówno pod względem funkcjonalności, jak i prostoty.

Celem grup cgroup w zarządzaniu zasobami jest: - żadna usługa nie może wyłączyć systemu jako całości. Lub żaden pojedynczy proces usługi (być może źle napisany skrypt PHP) nie zakłóci funkcjonalności serwera, zużywając zbyt wiele zasobów.

cgroups umożliwiają kontrolę zasobów jednostek dla następujących zasobów -

  • CPU - Ogranicz zadania intensywnie korzystające z procesora, które nie są krytyczne, jak inne, mniej intensywne zadania

  • Memory - Ogranicz ilość pamięci, którą usługa może zużywać

  • Disks - Ograniczanie we / wy dysku

** Czas procesora: **

Zadania wymagające mniejszego priorytetu procesora mogą mieć niestandardowo skonfigurowane segmenty procesora.

Przyjrzyjmy się na przykład następującym dwóm usługom.

Grzeczna usługa 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]#

Evil CPU Service 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]#

Ustawmy usługę Polite Service przy użyciu niższego priorytetu procesora -

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

Jak widać, w okresie normalnego czasu bezczynności systemu oba nieuczciwe procesy nadal używają cykli procesora. Jednak ta, która ma mniej przedziałów czasu, zużywa mniej czasu procesora. Mając to na uwadze, możemy zobaczyć, jak użycie krótszego przedziału czasu pozwoliłoby podstawowym zadaniom na lepszy dostęp do zasobów systemowych.

Aby ustawić usługi dla każdego zasobu, metoda set-property definiuje następujące parametry -

systemctl set-property name parameter=value

Plasterki procesora CPUShares
Limit pamięci MemoryLimit
Miękki limit pamięci MemorySoftLimit
Block IO Weight BlockIOWeight
Limit urządzeń blokowych (określony w / wolumin / ścieżka)) BlockIODeviceWeight
Przeczytaj IO BlockIOReadBandwidth
Zapis na dysku IO BlockIOReadBandwidth

Najczęściej usługi będą ograniczone przez użycie procesora , limity pamięci i odczyt / zapis we / wy .

Po zmianie każdego należy przeładować systemd i zrestartować usługę -

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

Skonfiguruj grupy CGroup w CentOS Linux

Aby tworzyć niestandardowe grupy cgroup w CentOS Linux, musimy najpierw zainstalować usługi i je skonfigurować.

Step 1 - Zainstaluj libcgroup (jeśli nie jest jeszcze zainstalowana).

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

Jak widać, domyślnie CentOS 7 ma zainstalowaną bibliotekę libcgroup z instalatorem wszystkiego . Użycie minimalnego instalatora będzie wymagało od nas zainstalowania narzędzi libcgroup wraz z wszelkimi zależnościami.

Step 2 - Uruchom i włącz usługę 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]#