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