La gestion des processus sous Linux est un concept fondamental que tout bon administrateur système devrait connaître. La majorité du travail que vous effectuez avec ces processus consiste en des tâches basiques et répétitives telles que démarrer et arrêter des processus, les rechercher, les tuer, etc.
Dans certains cas moins fréquents, vous devrez peut-être réorganiser vos processus en raison de l'allocation des ressources système. Lorsque ces situations se présentent, beaucoup d'entre nous utiliseront notre moteur de recherche préféré pour trouver le moyen le plus efficace de le faire. Maintenant que l'algorithme de recherche vous a amené ici pour activer Sysadmin, donnons les réponses que vous recherchez.
Je vais détailler comment la priorité est déterminée, puis vous montrer comment manipuler ces valeurs ci-dessous.
Priorité et relativité des processus
Les systèmes Linux exécutent régulièrement plus de processus qu'il n'y a d'unités de traitement dans l'ordinateur. Pour cette raison, le planificateur de processus passera rapidement d'un processus à l'autre sur un seul cœur, créant ainsi l'illusion que nous exécutons plusieurs processus simultanés.
En réalité, chaque processus se voit attribuer une politique d'ordonnancement des processus. Dans cette politique, une échelle de 40 points est utilisée pour mesurer la bonne niveaux d'un processus. Le niveau de gentillesse est une unité de mesure qui décrit la priorité relative du processus. Lorsque vous discutez des niveaux de gentillesse, notez que l'échelle va de -20 (priorité la plus élevée) à 19 (priorité la plus basse) et qu'un processus hérite son niveau de gentillesse du parent (le plus souvent 0).
[ Vous pourriez également apprécier : Linux Command Basics :7 commandes pour la gestion des processus ]
Maintenant, si un processus a un niveau de gentillesse inférieur (inférieur à zéro), alors il sera moins susceptible d'abandonner son utilisation du processeur (pas très gentil, est-ce?). D'un autre côté, un processus avec une valeur de gentillesse élevée (supérieure à zéro) sera plus susceptible d'abandonner l'utilisation du processeur.
Un moyen facile de s'en souvenir est que si quelqu'un (ou un processus) est vraiment gentil, il est plus enclin à partager avec les autres. S'ils ne sont pas très gentils, ils ont tendance à protéger davantage ce qui leur appartient (les ressources CPU, dans ce cas).
De plus, s'il n'y a pas de pénurie de ressources, même les processus avec des niveaux de gentillesse élevés utiliseront tout le temps CPU disponible. Le seul moment où un processus produira ses ressources, c'est en cas de pénurie de bande passante.
Rapport prioritaire
Maintenant que nous avons tout le contexte entourant la priorité des processus, examinons quelques-unes des façons d'afficher ces informations sur le terminal.
Le moyen le plus rapide et le plus simple d'afficher les informations de gentillesse est d'utiliser le top
commande. Il affiche ces informations par défaut dans la quatrième colonne (de gauche à droite) et ne nécessite donc aucune option ou indicateur supplémentaire.
L'autre méthode, légèrement plus compliquée, consiste à utiliser le ps
commande avec une généreuse aide d'options de formatage. La commande suivante affichera les processus avec leurs ID de processus, leur nom, leur niveau de gentillesse et leur classe de planification (triés par ordre décroissant) :
[tcarrigan@localhost ~]$ ps axo pid,comm,nice,cls --sort=-nice
Maintenant en temps réel :
Manipuler la gentillesse existante
Nous savons maintenant comment visualiser la gentillesse d'un processus existant, mais que se passe-t-il si ce niveau de gentillesse ne répond pas à nos besoins ? Comment pouvons-nous modifier ces valeurs pour tirer le meilleur parti de notre système ? Eh bien, si vous avez un processus particulier qui consomme des ressources dont vous avez besoin ailleurs, vous pouvez réduire le niveau agréable de ce processus spécifique. Pour ce faire, nous utiliserons le renice
commande.
Remarque :seulement l'utilisateur root peut réduire un niveau de gentillesse (augmenter la priorité). Les utilisateurs non privilégiés peuvent augmenter les niveaux agréables mais ne peuvent pas les diminuer sans les autorisations root.
Jetez un oeil à ce sleep 500
processus. Il a un PID de 23990 et un niveau agréable par défaut de 0.
[tcarrigan@localhost ~]$ ps -o pid,comm,nice 23990
PID COMMAND NI
23990 sleep 0
Si je voulais rendre ce processus moins prioritaire, j'utiliserais le renice
suivant commande :
Pour rendre le processus plus important (abaisser le niveau de gentillesse), vous utiliseriez la même syntaxe de commande qu'un utilisateur privilégié.
[ Aide-mémoire gratuit :glossaire Kubernetes ]
Une dernière chose
D'accord, avant de conclure, il y a encore une astuce que je voulais inclure ici. Si vous allez démarrer un processus qui a généralement un niveau agréable par défaut qui n'est pas souhaitable, vous pouvez en fait définir ce paramètre lorsque vous lancez le processus. Nous utiliserons le sleep
commander à nouveau. Cependant, cette fois, nous allons le créer avec le nice
commande (qui définit par défaut le processus sur le niveau 10 de nice).
Vous pouvez définir un niveau de nice spécifique en utilisant la même commande avec la syntaxe suivante :
[tcarrigan@localhost ~]$ nice -n 19 sleep 500 &
La commande ci-dessus définit l'arrière-plan sleep 500
à un joli niveau de 19.
Ces commandes étaient très amusantes à apprendre et à montrer. À l'avenir, lorsque je rencontrerai des problèmes avec les ressources système ou les processus gourmands, je pourrai modifier les ressources qui leur sont allouées.