VMware ESXi and vSphere Cluster Management

Priorität eines Prozesses unter Linux mit nice und renice ändern

Lerne, wie du Linux-Prozesse mit nice und renice startest, ihre CPU-Priorität änderst, PIDs und Nice-Werte prüfst und Berechtigungsfehler vermeidest.

Mit nice und renice lässt sich die relative CPU-Scheduling-Priorität von Linux-Prozessen beeinflussen. nice wird beim Start eines neuen Prozesses verwendet, während renice einen bereits laufenden Prozess anpasst.

Diese Befehle betreffen hauptsächlich die Verteilung von CPU-Zeit. Sie sind keine allgemeine Lösung für Arbeitsspeicher-, Datenträger-, Netzwerk- oder Sperren-Engpässe.

Grundlagen: Prozess, PID, Scheduler und Nice-Wert

Ein Prozess ist ein laufendes Programm mit eigener Prozess-ID und eigener Ressourcenverwaltung. Die PID (Process ID) ist die numerische Kennung, über die ein einzelner Prozess adressiert wird.

Der Scheduler ist eine Kernel-Komponente, die entscheidet, welcher ausführbare Prozess CPU-Zeit erhält. Jeder normale laufende Prozess besitzt einen Nice-Wert. Er beeinflusst, wie bevorzugt der Prozess gegenüber konkurrierenden Prozessen behandelt wird.

  • Der Standardwert ist 0.
  • Der gültige Bereich reicht unter Linux von -20 bis 19.
  • Ein numerisch kleinerer Wert bedeutet eine höhere CPU-Priorität.
  • Ein numerisch größerer Wert bedeutet eine niedrigere CPU-Priorität.

Der Nice-Wert garantiert keine feste oder absolute CPU-Zuteilung. Er beeinflusst die relative Behandlung von Prozessen, die gleichzeitig CPU-Zeit benötigen. Ein Prozess mit Nice-Wert 15 kann deshalb weiterhin nahezu eine ganze CPU auslasten, wenn keine relevanten Konkurrenten vorhanden sind.

Nice-Werte und ihre Wirkung

Nice-Wert-BereichRelative CPU-PrioritätTypische VerwendungBenötigte Berechtigung
-20 bis -1HochZeitkritische oder wichtige Aufgaben, mit VorsichtAdministrationsrechte oder passende Capabilities
0StandardNormale ProzesseStandardwert
1 bis 19VerringertCPU-intensive, nicht zeitkritische HintergrundaufgabenFür eigene Prozesse normalerweise durch normale Benutzer möglich

Berechtigungen und Sicherheitsregeln

Ein normaler Benutzer darf in der Regel nur Prozesse ändern, die ihm gehören. Einen eigenen Prozess weniger bevorzugt zu behandeln, erreicht man durch das Erhöhen des Nice-Werts, etwa von 0 auf 10.

Das Setzen eines negativen Nice-Werts oder allgemein das Verringern des Nice-Werts erhöht die Priorität. Dafür sind normalerweise root oder entsprechende Linux-Capabilities erforderlich. root ist das administrative Benutzerkonto mit weitreichenden Rechten. Mit sudo kann ein Benutzer einen erlaubten Befehl vorübergehend mit erhöhten Rechten ausführen.

Die genaue Regel hängt von Distribution, PAM-Limits, Container-Konfiguration, Capabilities und weiteren Systemeinstellungen ab. Auch sudo funktioniert nur, wenn der Benutzer für den jeweiligen Befehl freigeschaltet ist.

Neuen Prozess mit nice starten

Die grundlegende Syntax lautet:

nice -n NICE_WERT BEFEHL [ARGUMENTE]

Die Option -n gibt den gewünschten Nice-Wert für den neuen Prozess an. Ein positiver Wert reduziert dessen relative CPU-Bevorzugung:

nice -n 15 vim

Damit wird vim mit Nice-Wert 15 gestartet. Das ist sinnvoll, wenn ein Programm im Hintergrund arbeiten soll und interaktive Aufgaben möglichst wenig beeinträchtigen soll.

Ein weiteres Beispiel ist eine CPU-intensive Komprimierung:

nice -n 10 tar -czf backup.tar.gz projekt/

Eine höhere Priorität wird mit einem negativen Wert angefordert. Dafür sind in der Regel erhöhte Rechte erforderlich:

sudo nice -n -15 vim

Dieser Prozess startet mit Nice-Wert -15, sofern die Berechtigungen und Systemrichtlinien dies erlauben. Bei zusammengesetzten Befehlen muss der privilegierte Teil tatsächlich den zu startenden Prozess umfassen. Ein vorangestelltes sudo macht nicht automatisch jede spätere Shell-Operation privilegiert.

nice und renice im Vergleich

BefehlZeitpunkt der VerwendungZielBeispiel
niceVor dem StartNeuen Prozess mit angepasstem Nice-Wert startennice -n 15 vim
reniceNach dem StartNice-Wert eines laufenden Prozesses ändernrenice -n 15 -p 14475

Laufenden Prozess mit renice ändern

Die grundlegende Syntax für eine oder mehrere Prozess-IDs lautet:

renice -n NICE_WERT -p PID [PID ...]

Die Option -p kennzeichnet die folgenden Zahlen als PIDs. Eine PID adressiert dabei genau die laufende Prozessinstanz, die geändert werden soll.

Beispiel: Einen eigenen laufenden Prozess auf Nice-Wert 15 setzen:

renice -n 15 -p 14475

Mehrere Prozesse können in einem Aufruf angegeben werden:

renice -n 10 -p 14475 14476 14477

Für eine Erhöhung der Priorität wird ein negativer Wert verwendet. Das erfordert normalerweise administrative Rechte:

sudo renice -n -5 -p 14475

Ohne ausreichende Rechte bricht renice mit einer Berechtigungsfehlermeldung ab. Eine erfolgreiche Änderung gilt für die konkrete laufende Prozessinstanz und nicht automatisch für spätere Neustarts.

PID und aktuellen Nice-Wert ermitteln

Gezielte Prüfung mit ps

Mit ps lassen sich PID, Nice-Wert und Prozessname gezielt anzeigen:

ps -o pid,ni,comm -p 14475

Die Ausgabe enthält typischerweise:

  • PID: Prozess-ID
  • NI: aktueller Nice-Wert
  • COMMAND oder COMM: Prozessname

Nach einer Änderung kannst du denselben Befehl erneut ausführen und den Wert in der Spalte NI vergleichen.

Prozess über den Namen suchen

pgrep sucht passende Prozesse und kann mit -a zusätzlich die Kommandozeile ausgeben:

pgrep -a vim

pidof ist eine weitere Möglichkeit, die PIDs eines Programms zu ermitteln. Bei mehreren Treffern musst du prüfen, welche Prozessinstanz tatsächlich gemeint ist.

Interaktive Kontrolle mit top und htop

Mit top kannst du laufende Prozesse beobachten:

top

Die Spalte NI zeigt den Nice-Wert. Die Spalte PR zeigt eine vom Scheduler verwendete beziehungsweise angezeigte Prozesspriorität. PR und NI sind nicht dasselbe: Der Nice-Wert ist ein Einflussfaktor, während PR die Scheduler-Priorität in der Prozessanzeige bezeichnet. htop bietet eine ähnliche interaktive Ansicht, sofern es installiert ist.

Werkzeuge zur Prozesssuche und Kontrolle

WerkzeugZweckRelevante Information
psGezielte Prozesslisten und DetailabfragenPID, NI, Kommando und weitere Prozessdaten
pgrep oder pidofProzesse anhand ihres Namens findenEine oder mehrere PIDs
top oder htopInteraktive BeobachtungNI, PR, CPU-Auslastung und laufende Prozesse

Sinnvolle Einsatzfälle und Grenzen

  • Starte lange, CPU-intensive und nicht zeitkritische Aufgaben mit einem positiven Nice-Wert, zum Beispiel 10 oder 15.
  • Beobachte bei einer höheren Priorität die Systemreaktion. Andere Prozesse können weniger CPU-Zeit erhalten.
  • Verwende negative Werte nur, wenn die Aufgabe tatsächlich bevorzugt werden muss und die Auswirkungen bekannt sind.
  • Eine höhere Priorität garantiert nicht, dass ein Prozess schneller beendet wird. Wartet er auf Datenträger-I/O, Netzwerk, Speicher oder eine Sperre, bringt ein anderer Nice-Wert möglicherweise wenig.
  • nice und renice begrenzen die CPU-Nutzung nicht absolut. Für harte oder dauerhafte CPU-Limits sind beispielsweise cgroups, systemd-Ressourcensteuerung oder andere CPU-Limit-Verfahren geeigneter.

Eine Nice-Änderung gilt normalerweise nur für die konkrete laufende Prozessinstanz. Wird ein Dienst neu gestartet, kann der ursprüngliche Nice-Wert wieder gelten. Für dauerhafte Einstellungen muss die Startkonfiguration des Dienstmanagers oder des Startskripts angepasst werden.

Priorität ändern ist nicht Prozess beenden

nice und renice ändern die CPU-Scheduling-Priorität. Sie stoppen und beenden keinen Prozess.

Zum gezielten Beenden werden separate Werkzeuge verwendet: kill adressiert typischerweise eine PID, pkill arbeitet anhand von Prozessmustern und killall anhand eines Prozessnamens. Namen-basierte Befehle müssen sorgfältig eingesetzt werden, weil dadurch mehrere Prozesse betroffen sein können.

Fehlerbehebung

„Permission denied“ beim negativen Nice-Wert

Der Benutzer versucht, die Priorität ohne ausreichende Rechte zu erhöhen. Prüfe die Berechtigungen und verwende den Vorgang nur bei entsprechender administrativer Freigabe mit sudo. Berücksichtige außerdem PAM-Limits, Capabilities und mögliche Einschränkungen eines Containers.

renice findet den Prozess nicht

Die PID kann falsch sein oder der Prozess wurde bereits beendet. Suche mit ps, pgrep oder top erneut nach der aktuellen PID:

pgrep -a vim

Ein eigener Prozess lässt sich nicht von 10 auf 0 setzen

Das Verringern des Nice-Werts erhöht die Priorität und ist deshalb nicht ohne Weiteres erlaubt. Verwende, falls betrieblich zulässig, erhöhte Rechte oder starte den Prozess mit der gewünschten Priorität neu.

Der Prozess wird trotz höherer Priorität nicht schneller

Wahrscheinlich wartet die Aufgabe nicht auf CPU-Zeit, sondern auf I/O, Speicher, Netzwerk oder eine Sperre. Prüfe den tatsächlichen Engpass mit passenden Diagnosewerkzeugen, statt ausschließlich den Nice-Wert zu verändern.

Ein Prozess beansprucht trotz hohem Nice-Wert viel CPU

Ein hoher Nice-Wert ist keine absolute CPU-Begrenzung. Wenn kaum Konkurrenz vorhanden ist, kann der Prozess weiterhin viel CPU-Zeit nutzen. Verwende für eine echte Begrenzung Ressourcensteuerung wie cgroups oder systemd-Limits.

Die Änderung ist nach einem Neustart verschwunden

Nice-Änderungen gelten für die konkrete Prozessinstanz. Ergänze für dauerhaft gestartete Dienste eine passende Nice-Einstellung in der Konfiguration des Dienstmanagers oder im Startskript.

Kurzreferenz

# Neuen Prozess mit niedrigerer CPU-Priorität starten
nice -n 15 vim

# CPU-intensive Aufgabe rücksichtsvoll ausführen
nice -n 10 tar -czf backup.tar.gz projekt/

# Neuen Prozess mit höherer Priorität starten
sudo nice -n -15 vim

# PID, Nice-Wert und Prozessnamen prüfen
ps -o pid,ni,comm -p 14475

# Passende PIDs und Kommandozeilen suchen
pgrep -a vim

# Laufenden eigenen Prozess auf Nice-Wert 15 setzen
renice -n 15 -p 14475

# Laufenden Prozess privilegiert auf Nice-Wert -5 setzen
sudo renice -n -5 -p 14475

# Mehrere PIDs gemeinsam ändern
renice -n 10 -p 14475 14476 14477

Weitere Grundlagen zur Prozessverwaltung findest du unter Priorität eines Prozesses ändern.