Comment limiter l'utilisation du processeur d'un processus sur Linux

Comment limiter l'utilisation du processeur d'un processus sur Linux
Au cours de votre vie Linux, vous devez voir certains processus prendre tous les cycles du processeur (90 à 99% d'utilisation du processe. Cela peut être bien si le processus prend quelques secondes pour terminer. Mais et si ça prend beaucoup de temps? Ce n'est pas très agréable de s'asseoir et de regarder votre ordinateur insensible pendant des minutes et des heures, à droite? Eh bien, Linux a de nombreux outils impressionnants pour les fabriquer pas très gentil processus pour bon processus.

Vous pouvez définir la quantité de CPU un seul processus autorisé à avoir. Si le processus a vraiment besoin de beaucoup de puissance CPU, vous pouvez exécuter quelques commandes pour lui donner tous les cycles de processeur inactifs (cycles CPU dont vous n'avez pas besoin). De cette façon, vous n'aurez jamais à vous asseoir et à regarder votre ordinateur insensible depuis longtemps.

Dans cet article, je vais vous montrer comment limiter l'utilisation du processeur d'un processus sur Linux. Je vais utiliser Centos 7 dans cet article. Mais toute distribution Linux moderne devrait fonctionner. Alors, commençons.

Limiter l'utilisation du processeur avec Nice et Renice:

Sur Linux, les priorités de chaque processus de fonctionnement peuvent être modifiées. Vous pouvez définir des priorités plus élevées au processus, ce qui est plus important pour vous qu'un processus qui monte votre processeur sans raison valable.

Chaque processus sur Linux a une bonne valeur. La valeur de Nice détermine quel processus a des priorités plus élevées et qui a une baisse. Une bonne valeur peut être entre -20 et 19. Un processus avec la bonne valeur de -20 aura la priorité la plus élevée et utilisera le plus de cycles CPU. Un processus avec la Nice Value 19 aura la priorité la plus basse et utilisera le CPU lorsqu'aucun autre processus ne l'utilisera uniquement.

Il y a deux façons de définir la bonne valeur d'un processus. Vous pouvez soit démarrer un processus avec le bon Commande pour définir une bonne valeur tout en démarrant le processus. Ou vous pouvez utiliser le Renice commande pour définir une bonne valeur après le début d'un processus.

Pour définir une bonne valeur lorsque vous démarrez un processus, exécutez le processus comme suit:

$ NICE -N NICE_VALUE COMMAND_TO_RUN

NOTE: Ici Nice_value peut être n'importe quoi -20 à 19 et Command_To_Run est toute commande que vous souhaitez exécuter avec la belle valeur de Nice_value.

Par exemple, disons, vous voulez exécuter le dormir commande avec la belle valeur de 14. Exécutez la commande comme suit:

$ Nice -n 14 Sleep 40000 &

Vous pouvez maintenant vérifier si la bonne valeur est définie correctement en utilisant la commande supérieure. Vous pouvez répertorier tous les processus que vous avez commencé (comme utilisateur de connexion) avec la commande suivante:

$ ps -fl

Comme vous pouvez le voir, la bonne valeur du processus est définie sur 14.

Maintenant, si vous souhaitez modifier la bonne valeur de vos processus existants, tout ce dont vous avez besoin est l'ID de processus (PID) du processus dont vous souhaitez modifier la bonne valeur. Vous pouvez utiliser le PS AUX commande ou le haut Commande pour trouver l'ID de processus ou PID.

Alors tu peux courir Renice Commande comme suit pour modifier la bonne valeur d'un processus existant:

$ sudo Renice -n new_nice_value -p process_pid

Comme vous pouvez le voir, la bonne valeur du processus avec PID 6422 est modifiée.

Limiter l'utilisation du processeur avec les CGROUP:

La forme complète de Troupes est Control ggroupes. Il s'agit d'une fonctionnalité de noyau Linux utilisé pour limiter les ressources pour traiter des groupes tels que (CPU, mémoire, autorisation et bien d'autres) sur Linux.

Tout ce que vous avez à faire est de créer un nouveau groupe de processus et d'ajouter vos processus auxquels vous souhaitez limiter les ressources, à ce groupe. Simple!

Les outils de gestion des CGROUP ne sont pas installés sur CentOS 7 par défaut. Mais il est disponible dans le référentiel officiel de Centos 7.

Mettez d'abord à jour le cache du référentiel de package YUM avec la commande suivante:

$ sudo yum makecache

Installez maintenant les outils de gestion CGROUPS avec la commande suivante:

$ sudo yum install libcgroup-tools

Maintenant, appuyez sur y Et puis appuyez sur .

Il doit être installé.

Vous pouvez limiter l'utilisation du processeur d'un seul groupe. Par exemple, vous pouvez utiliser des CGROUPS pour indiquer un processus au sein d'un CGROUP pour utiliser, disons 100 ms sur 1000 ms (ou .1s sur 1s) de la processeur.

Créez d'abord un CGROUP avec la commande suivante:

$ sudo cgcreate -g CPU: / cpumimit

NOTE: Ici, cpumimite est le nom de groupe qui contrôle le CPU usage.

Maintenant, vous devez définir CPU.CFS_PERIOD_US et CPU.cfs_quota_us propriété sur le cpumimite groupe.

Pour cet exemple, 1000 ms (millisecondes) ou 1000000 US (microsecondes) doivent être définis sur CPU.CFS_PERIOD_US la propriété et 100 ms ou 100000us doivent être définies sur le CPU.cfs_quota_us propriété.

Exécutez les commandes suivantes pour définir ces propriétés sur le cpumimite groupe:

$ sudo cgset -r CPU.CFS_PERIOD_US = 1000000 CPULIMIT
$ sudo cgset -r CPU.cfs_quota_us = 100000 cpumimit

Vous pouvez maintenant exécuter la commande suivante pour vérifier si toutes les propriétés sont correctement définies:

$ sudo cgget -g CPU: cpumimit

NOTE: Ici, cpumimite est le nom du cgroup et CPU est la ressource que je limite.

Comme tu peux le voir, CPU.CFS_PERIOD_US et CPU.cfs_quota_us sont correctement définis.

Maintenant quel que soit le processus auquel vous ajoutez cpumimite CGroup utilisera 1/10e (100000/1000000 = 1/10 = 0.1 = 10%) du total des cycles de CPU.

Maintenant, pour limiter le processeur d'un processus, démarrez le programme ou la commande avec cGEXEC comme suit:

$ sudo CGEXEC -G CPU: CPULIMIT YOUR_COMMAND

NOTE: Ici, Votre_Command peut être toutes les commandes Linux valides.

Pour prouver que cela fonctionne réellement, je vais d'abord exécuter la commande suivante sans cgroupes puis avec des groupes et vous montrer les résultats.

$ dd if = / dev / zéro de = out bs = 1m

Comme vous pouvez le voir, sans Cgroups, la commande utilise 90% du CPU total.

Ensuite, j'ai exécuté la même commande avec des groupes que suit:

$ sudo CGEXEC -G CPU: cpumimit dd if = / dev / zero of = out bs = 1m

Comme vous pouvez le voir, l'utilisation du processeur est de 10% au maximum. Le processus n'utilise pas plus que cela.

C'est ainsi que vous utilisez des CGROUPS pour limiter l'utilisation du processeur d'un processus sur Linux. Merci d'avoir lu cet article.

Les références:

[1] https: // Access.chapeau rouge.com / documentation / en-us / red_hat_enterprise_linux / 6 / html / ressource_management_guide / sec-cpu

[2] https: // linux.mourir.net / homme / 1 / Nice

[3] https: // linux.mourir.net / homme / 8 / Renice