Website-Suche

So legen Sie die Linux-Prozesspriorität mit den Befehlen „nice“ und „renice“ fest


In diesem Artikel erläutern wir kurz den Kernel-Scheduler (auch bekannt als Prozess-Scheduler) und die Prozesspriorität, die darüber hinausgehende Themen sind Umfang dieses Leitfadens. Dann tauchen wir ein wenig in die Linux-Prozessverwaltung ein: Erfahren Sie, wie Sie ein Programm oder einen Befehl mit geänderter Priorität ausführen und auch die Priorität laufender Linux-Prozesse ändern.

Lesen Sie auch: So überwachen Sie Linux-Prozesse und legen Prozessgrenzen pro Benutzer fest

Den Linux-Kernel-Scheduler verstehen

Ein Kernel-Scheduler ist eine Einheit des Kernels, die aus allen ausführbaren Prozessen den am besten geeigneten Prozess für die nächste Ausführung bestimmt; Es teilt Prozessorzeit zwischen den ausführbaren Prozessen auf einem System zu. Ein ausführbarer Prozess ist ein Prozess, der nur auf CPU-Zeit wartet und zur Ausführung bereit ist.

Der Scheduler bildet den Kern des Multitasking unter Linux und verwendet einen prioritätsbasierten Planungsalgorithmus, um zwischen den ausführbaren Prozessen im System auszuwählen. Es ordnet die Prozesse nach den am meisten benötigten Prozessen und dem Bedarf an CPU-Zeit.

Prozesspriorität und Nice Value verstehen

Der Kernel speichert zahlreiche Informationen über Prozesse, einschließlich der Prozesspriorität, bei der es sich einfach um die einem Prozess zugeordnete Planungspriorität handelt. Prozesse mit höherer Priorität werden vor Prozessen mit niedrigerer Priorität ausgeführt, während Prozesse mit derselben Priorität nacheinander und wiederholt geplant werden.

In Linux sind insgesamt 140 Prioritäten und zwei unterschiedliche Prioritätsbereiche implementiert. Der erste ist ein netter Wert (niceness), der von -20 (höchster Prioritätswert) bis 19 (niedrigster Prioritätswert) reicht Der Standardwert ist 0, das werden wir in diesem Handbuch aufdecken. Die andere ist die Echtzeitpriorität, die standardmäßig von 1 bis 99 und dann von 100 bis 139 reicht sind für den Benutzerbereich gedacht.

Ein wichtiges Merkmal von Linux ist die dynamische, prioritätsbasierte Planung, die es ermöglicht, den Wert von Prozessen je nach Bedarf zu ändern (erhöhen oder verringern), wie wir später sehen werden.

So überprüfen Sie den guten Wert von Linux-Prozessen

Um die schönen Werte von Prozessen anzuzeigen, können wir Dienstprogramme wie ps, top oder htop verwenden.

Um den netten Wert von Prozessen mit dem Befehl ps im benutzerdefinierten Format anzuzeigen (hier zeigt die NI-Spalte den netten Wert von Prozessen an).

ps -eo pid,ppid,ni,comm

Alternativ können Sie die Dienstprogramme top oder htop verwenden, um die netten Werte der Linux-Prozesse wie gezeigt anzuzeigen.

top
htop

Unterschied zwischen PR oder PRI und NI

Anhand der top- und htop-Ausgaben oben können Sie erkennen, dass es eine Spalte mit den Namen PR und PRI gibt Dies zeigt die Priorität eines Prozesses an.

Das bedeutet also:

  • NI – ist der nette Wert, der ein User-Space-Konzept ist
  • PR oder PRI – ist die tatsächliche Priorität des Prozesses, wie sie vom Linux-Kernel gesehen wird.
So berechnen Sie PR- oder PRI-Werte
Total number of priorities = 140
Real time priority range(PR or PRI):  0 to 99 
User space priority range: 100 to 139

Schöner Wertebereich (NI): -20 bis 19

PR = 20 + NI
PR = 20 + (-20 to + 19)
PR = 20 + -20  to 20 + 19
PR = 0 to 39 which is same as 100 to 139.

Wenn Sie jedoch ein rt anstelle einer Zahl sehen, wie im Screenshot unten gezeigt, bedeutet dies im Grunde, dass der Prozess mit Echtzeit-Planungspriorität ausgeführt wird.

So führen Sie einen Befehl mit einem bestimmten Nice-Wert unter Linux aus

Hier sehen wir uns an, wie man die CPU-Auslastung eines Programms oder Befehls priorisiert. Wenn Sie ein sehr CPU-intensives Programm oder eine sehr CPU-intensive Aufgabe haben, Ihnen aber auch bewusst ist, dass die Ausführung lange dauern kann, können Sie ihr mit dem nice-Befehl eine hohe oder günstige Priorität setzen.

Die Syntax lautet wie folgt:

nice -n niceness-value [command args] 
OR
nice -niceness-value [command args] 	#it’s confusing for negative values
OR
nice --adjustment=niceness-value [command args]

Wichtig:

  • Wenn kein Wert angegeben wird, legt nice standardmäßig eine Priorität von 10 fest.
  • Ein Befehl oder Programm, das ohne Nice ausgeführt wird, hat standardmäßig die Priorität Null.
  • Nur Root kann einen Befehl oder ein Programm mit erhöhter oder hoher Priorität ausführen.
  • Normale Benutzer können einen Befehl oder ein Programm nur mit niedriger Priorität ausführen.

Anstatt beispielsweise ein Programm oder einen Befehl mit der Standardpriorität zu starten, können Sie es mit dem folgenden netten Befehl mit einer bestimmten Priorität starten.

sudo nice -n 5 tar -czf backup.tar.gz ./Documents/*
OR
sudo nice --adjustment=5 tar -czf backup.tar.gz ./Documents/*

Sie können auch die dritte Methode verwenden, die insbesondere bei negativen Netness-Werten etwas verwirrend ist.

sudo nice -5 tar -czf backup.tar.gz  ./Documents/*

Ändern Sie die Planungspriorität eines Prozesses unter Linux

Wie bereits erwähnt, ermöglicht Linux eine dynamische, prioritätsbasierte Planung. Wenn also ein Programm bereits läuft, können Sie seine Priorität mit dem renice-Befehl in dieser Form ändern:

renice -n  -12  -p 1055
renice -n -2  -u apache

Aus der Beispielausgabe top unten geht hervor, dass die Nettigkeit des teamspe+ mit der PID 1055 jetzt -12 und für alle gilt Prozesse im Besitz des Benutzers Apache sind -2.

Wenn Sie immer noch diese Ausgabe verwenden, können Sie sehen, dass die Formel PR=20 + NI lautet:

PR for ts3server = 20 + -12 = 8
PR for apache processes = 20 + -2 = 18

Alle Änderungen, die Sie mit renice command an den netten Prozesswerten eines Benutzers vornehmen, gelten nur bis zum nächsten Neustart. Um dauerhafte Standardwerte festzulegen, lesen Sie den nächsten Abschnitt.

So legen Sie den Standard-Nice-Wert der Prozesse eines bestimmten Benutzers fest

Sie können den standardmäßigen Nice-Wert eines bestimmten Benutzers oder einer bestimmten Gruppe in der Datei /etc/security/limits.conf festlegen. Seine Hauptfunktion besteht darin, die Ressourcengrenzen für die über PAM angemeldeten Benutzer zu definieren.

Die Syntax zum Definieren eines Limits für einen Benutzer lautet wie folgt (und die möglichen Werte der verschiedenen Spalten werden in der Datei erklärt):

#<domain>   <type>  <item>  <value>

Verwenden Sie nun die folgende Syntax, wobei „hart“ bedeutet, dass harte Links erzwungen werden, und „weich“ bedeutet, dass die weichen Grenzwerte erzwungen werden.

<username>  <hard|soft>  priority  <nice value>

Alternativ können Sie unter /etc/security/limits.d/ eine Datei erstellen, die die Einstellungen in der Hauptdatei oben überschreibt. Diese Dateien werden dann in alphabetischer Reihenfolge gelesen.

Erstellen Sie zunächst die Datei /etc/security/limits.d/tecmint-priority.conf für den Benutzer tecmint:

vi /etc/security/limits.d/tecmint-priority.conf

Fügen Sie dann diese Konfiguration hinzu:

tecmint  hard  priority  10

Speichern und schließen Sie die Datei. Von nun an wird jeder Prozess im Besitz von tecmint einen schönen Wert von 10 und einen PR von 30 haben.

Weitere Informationen finden Sie in den Manpages von nice und renice:

man nice
man renice 

Vielleicht möchten Sie auch die folgenden Artikel über Linux-Prozessmanagement lesen.

  1. So finden und beenden Sie laufende Prozesse unter Linux
  2. Eine Anleitung zu Kill-, Pkill- und Killall-Befehlen zum Beenden eines Prozesses unter Linux
  3. So überwachen Sie die Systemnutzung, Ausfälle und beheben Fehler bei Linux-Servern
  4. CPUTool – Begrenzen und steuern Sie die CPU-Auslastung aller Prozesse unter Linux

In diesem Artikel haben wir kurz den Kernel-Scheduler und die Prozesspriorität erklärt, uns angeschaut, wie man ein Programm oder einen Befehl mit geänderter Priorität ausführt und auch die Priorität aktiver Linux-Prozesse ändert. Sie können Ihre Gedanken zu diesem Thema über das unten stehende Feedback-Formular mitteilen.