36.4. Fixer des limites de CPU aux applications en utilisant cgroups-v1
Il arrive qu'une application consomme beaucoup de temps processeur, ce qui peut avoir un impact négatif sur la santé globale de votre environnement. Utilisez le système de fichiers virtuel /sys/fs/ pour configurer des limites de CPU pour une application utilisant control groups version 1 (cgroups-v1).
Conditions préalables
- Vous disposez des droits d'accès à la racine.
- Vous disposez d'une application dont vous souhaitez limiter la consommation de l'unité centrale.
Vous avez configuré le système pour qu'il monte
cgroups-v1par défaut lors du démarrage du système par le systèmesystemdet le gestionnaire de services :grubby --update-kernel=/boot/vmlinuz-$(uname -r) --args="systemd.unified_cgroup_hierarchy=0 systemd.legacy_systemd_cgroup_controller"
# grubby --update-kernel=/boot/vmlinuz-$(uname -r) --args="systemd.unified_cgroup_hierarchy=0 systemd.legacy_systemd_cgroup_controller"Copy to Clipboard Copied! Toggle word wrap Toggle overflow Cette opération ajoute les paramètres de ligne de commande du noyau nécessaires à l'entrée de démarrage actuelle.
Procédure
Identifiez l'ID du processus (PID) de l'application dont vous souhaitez limiter la consommation de CPU :
Copy to Clipboard Copied! Toggle word wrap Toggle overflow L'exemple de sortie du programme
toprévèle quePID 6955(application illustrativesha1sum) consomme beaucoup de ressources de l'unité centrale.Créez un sous-répertoire dans le répertoire du contrôleur de ressources
cpu:mkdir /sys/fs/cgroup/cpu/Example/
# mkdir /sys/fs/cgroup/cpu/Example/Copy to Clipboard Copied! Toggle word wrap Toggle overflow Le répertoire ci-dessus représente un groupe de contrôle, dans lequel vous pouvez placer des processus spécifiques et leur appliquer certaines limites de CPU. En même temps, certains fichiers d'interface
cgroups-v1et des fichiers spécifiques au contrôleurcpuseront créés dans le répertoire.Il est possible d'inspecter le groupe de contrôle nouvellement créé :
Copy to Clipboard Copied! Toggle word wrap Toggle overflow L'exemple de sortie montre des fichiers, tels que
cpuacct.usage,cpu.cfs._period_us, qui représentent des configurations et/ou des limites spécifiques, qui peuvent être définies pour les processus dans le groupe de contrôleExample. Notez que les noms de fichiers respectifs sont précédés du nom du contrôleur du groupe de contrôle auquel ils appartiennent.Par défaut, le groupe de contrôle nouvellement créé hérite de l'accès à l'ensemble des ressources de l'unité centrale du système, sans limite.
Configurer les limites de CPU pour le groupe de contrôle :
echo "1000000" > /sys/fs/cgroup/cpu/Example/cpu.cfs_period_us echo "200000" > /sys/fs/cgroup/cpu/Example/cpu.cfs_quota_us
# echo "1000000" > /sys/fs/cgroup/cpu/Example/cpu.cfs_period_us # echo "200000" > /sys/fs/cgroup/cpu/Example/cpu.cfs_quota_usCopy to Clipboard Copied! Toggle word wrap Toggle overflow Le fichier
cpu.cfs_period_usreprésente une période de temps en microsecondes (µs, représentée ici par "us") pour la fréquence à laquelle l'accès d'un groupe de contrôle aux ressources de l'unité centrale doit être réattribué. La limite supérieure est de 1 seconde et la limite inférieure de 1000 microsecondes.Le fichier
cpu.cfs_quota_usreprésente la durée totale en microsecondes pendant laquelle tous les processus d'un groupe de contrôle peuvent s'exécuter au cours d'une période (telle que définie parcpu.cfs_period_us). Dès que les processus d'un groupe de contrôle, au cours d'une période unique, utilisent la totalité du temps spécifié par le quota, ils sont bridés pour le reste de la période et ne sont plus autorisés à s'exécuter jusqu'à la période suivante. La limite inférieure est de 1000 microsecondes.Les exemples de commandes ci-dessus définissent les limites de temps de l'unité centrale de sorte que tous les processus du groupe de contrôle
Examplene puissent s'exécuter que pendant 0,2 seconde (définie parcpu.cfs_quota_us) sur 1 seconde (définie parcpu.cfs_period_us).Il est possible de vérifier les limites :
cat /sys/fs/cgroup/cpu/Example/cpu.cfs_period_us /sys/fs/cgroup/cpu/Example/cpu.cfs_quota_us 1000000 200000
# cat /sys/fs/cgroup/cpu/Example/cpu.cfs_period_us /sys/fs/cgroup/cpu/Example/cpu.cfs_quota_us 1000000 200000Copy to Clipboard Copied! Toggle word wrap Toggle overflow Ajouter le PID de l'application au groupe de contrôle
Example:echo "6955" > /sys/fs/cgroup/cpu/Example/cgroup.procs echo "6955" > /sys/fs/cgroup/cpu/Example/tasks
# echo "6955" > /sys/fs/cgroup/cpu/Example/cgroup.procs or # echo "6955" > /sys/fs/cgroup/cpu/Example/tasksCopy to Clipboard Copied! Toggle word wrap Toggle overflow La commande précédente garantit qu'une application souhaitée devient membre du groupe de contrôle
Exampleet ne dépasse donc pas les limites de CPU configurées pour le groupe de contrôleExample. Le PID doit représenter un processus existant dans le système. L'adressePID 6955a été attribuée au processussha1sum /dev/zero &, utilisé pour illustrer le cas d'utilisation du contrôleurcpu.Vérifiez que l'application s'exécute dans le groupe de contrôle spécifié :
Copy to Clipboard Copied! Toggle word wrap Toggle overflow L'exemple ci-dessus montre que le processus de l'application souhaitée s'exécute dans le groupe de contrôle
Example, qui applique des limites de CPU au processus de l'application.Identifiez la consommation actuelle de l'unité centrale de votre application limitée :
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Remarquez que la consommation de l'unité centrale du site
PID 6955est passée de 99 % à 20 %.
La contrepartie de cgroups-v2 pour cpu.cfs_period_us et cpu.cfs_quota_us est le fichier cpu.max. Le fichier cpu.max est disponible via le contrôleur cpu.