Administrateur Linux - Gestion des ressources avec des crgoups
cgroups ou groupes de contrôle sont une caractéristique du noyau Linux qui permet à un administrateur d'allouer ou plafonner les ressources du système pour les services et aussi le groupe.
Pour lister les groupes de contrôle actifs en cours d'exécution, nous pouvons utiliser la commande ps suivante -
[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
La gestion des ressources, à partir de CentOS 6.X, a été redéfinie avec l' implémentation systemd init . En pensant à la gestion des ressources pour les services, la principale chose sur laquelle se concentrer sont les groupes de contrôle .cgroupsont avancé avec systemd en termes de fonctionnalité et de simplicité.
Le but des groupes de contrôle dans la gestion des ressources est qu'aucun service ne peut arrêter le système dans son ensemble. Ou aucun processus de service unique (peut-être un script PHP mal écrit) ne paralysera la fonctionnalité du serveur en consommant trop de ressources.
Les cgroups permettent le contrôle des ressources des unités pour les ressources suivantes -
CPU - Limitez les tâches intensives du processeur qui ne sont pas critiques comme d'autres tâches moins intensives
Memory - Limiter la quantité de mémoire qu'un service peut consommer
Disks - Limiter les E / S disque
** Temps CPU: **
Les tâches nécessitant moins de priorité de processeur peuvent avoir des tranches de processeur configurées de manière personnalisée.
Jetons un coup d'œil aux deux services suivants par exemple.
Service CPU poli 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]#
Service CPU maléfique 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]#
Définissons Polite Service en utilisant une priorité CPU moindre -
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 - -
Comme nous pouvons le voir, sur une période de temps d'inactivité normal du système, les deux processus non fiables utilisent toujours des cycles de processeur. Cependant, celui défini pour avoir moins de tranches de temps utilise moins de temps CPU. Dans cet esprit, nous pouvons voir comment l'utilisation d'une tranche de temps moindre permettrait aux tâches essentielles de mieux accéder aux ressources du système.
Pour définir des services pour chaque ressource, la méthode set-property définit les paramètres suivants -
systemctl set-property name parameter=value
Tranches de processeur | CPUShares |
Limite de mémoire | MemoryLimit |
Limite de mémoire souple | MemorySoftLimit |
Bloquer le poids d'E / S | BloquerIOWeight |
Bloquer la limite de périphérique (spécifié dans / volume / chemin)) | BlockIODeviceWeight |
Lire IO | BlockIOReadBandwidth |
E / S d'écriture sur disque | BlockIOReadBandwidth |
Le plus souvent, les services seront limités par l'utilisation du processeur , les limites de la mémoire et les E / S en lecture / écriture .
Après avoir changé chacun, il est nécessaire de recharger systemd et de redémarrer le service -
systemctl set-property foo.service CPUShares = 250
systemctl daemon-reload
systemctl restart foo.service
Configurer CGroups dans CentOS Linux
Pour créer des groupes de contrôle personnalisés dans CentOS Linux, nous devons d'abord installer les services et les configurer.
Step 1 - Installez libcgroup (s'il n'est pas déjà installé).
[root@localhost]# yum install libcgroup
Package libcgroup-0.41-11.el7.x86_64 already installed and latest version
Nothing to do
[root@localhost]#
Comme nous pouvons le voir, par défaut, CentOS 7 a libcgroup installé avec l' installateur de tout . L'utilisation d'un programme d'installation minimal nous obligera à installer les utilitaires libcgroup avec toutes les dépendances.
Step 2 - Démarrez et activez le service 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]#