Linux-Befehl nice: Priorität festlegen, mit renice ändern und den CPU-Anteil bei Konkurrenz messen

Affiliate-Hinweis v3.1
Affiliate-Hinweis v3.2 (mobil)
TestumgebungRHEL-FamilieAlmaLinux 9.8root · normales BenutzerkontoGeprüft am 2026-10-17

Der Linux-Befehl nice legt den nice-Wert (-20 bis 19) fest, der bestimmt, wie viel CPU ein Programm beim Ausführen an andere abgibt. Auf einem AlmaLinux-9-Server wurden zwei Tasks an einen einzigen CPU-Kern gebunden und mit wechselnden nice-Werten gemessen: Aufgeteilt wurde nur, wenn sie um die CPU konkurrierten, und der Task mit nice 19 nutzte nur 1,4 %.

Bereits laufende Prozesse änderst du mit renice, und für das Zurückstecken beim Datenträger ist ionice zuständig. Für alle drei Befehle steht hier genau die Ausgabe, die sie bei der Ausführung als root und als normaler Benutzer lieferten.

1️⃣ Linux-Befehl nice: Wertebereich und CPU-Anteil bei Konkurrenz

Der nice-Wert ist eine Zahl, die festlegt, wie stark ein Prozess beim Aufteilen der CPU-Zeit zurücksteckt; möglich sind -20 bis 19. Programme laufen normalerweise mit 0, -20 kommt zuerst an die Reihe und 19 steckt am meisten zurück.

Man könnte meinen, eine größere Zahl komme zuerst dran, doch beim nice-Wert ist es umgekehrt. Der Linux-Scheduler gibt jedem nice-Wert ein Gewicht und verteilt die CPU-Zeit in diesem Verhältnis: nice 0 hat 1024, 10 hat 110 und 19 hat 15.

Zurückgesteckt wird nur, wenn um die CPU konkurriert wird. Gibt es eine freie CPU, läuft auch ein Task mit nice 19 ohne Wartezeit. Das ist wie bei den Vorrangsitzen im Bus: Sind sie frei, darf sich jeder setzen – Platz gemacht wird nur, wenn der Bus voll ist.

🧭 nice-Werte bei freier CPU und bei Konkurrenz
Erklär-Diagramm
🖥️ CPU
⚖️ Task B
🖥️ Eine CPU ist frei – jeder Task bekommt einen eigenen Kern🖥️ Zwei Tasks teilen sich einen CPU-Kern
Task Anice 0 · Gewicht 1024
100%50.0%90.3%98.6%
Task Bnice 0 · Gewicht 1024nice 10 · Gewicht 110nice 19 · Gewicht 15
100%50.0%9.7%1.4%
Ist CPU übrig, gibt es niemanden, dem Task B Platz machen müsste – er nutzt die CPU unabhängig vom nice-Wert voll.
Konkurrieren sie um denselben Kern, teilen sich zwei nice-0-Tasks mit gleichem Gewicht die CPU-Zeit zur Hälfte.
nice 10 hat das Gewicht 110, etwa ein Neuntel von nice 0 (1024); die CPU-Zeit wird rund 90,3 : 9,7 verteilt.
nice 19 hat das Gewicht 15; bei Konkurrenz nutzt Task B nur etwa 1,4 % der CPU-Zeit.

Die Gewichtstabelle ist das Array [sched_prio_to_weight] im Linux-Kernel-Quellcode [kernel/sched/core.c]; sie ist so festgelegt, dass jeder Schritt nach oben beim nice-Wert die CPU-Zeit um etwa 10 % senkt.

2️⃣ nice-Grundlagen: +10 ohne Zahlenangabe und Werte außerhalb des Bereichs

Hängst du einen Befehl an nice an, läuft dieser mit geändertem nice-Wert; ohne Befehl gibt nice den nice-Wert der aktuellen Shell aus.

nice
0

In den folgenden Beispielen gibt die gestartete bash ihren eigenen nice-Wert mit [ps -o ni=] aus. Ohne -n wird 10 zum aktuellen Wert addiert, mit -n 5 wird 5 addiert.

nice bash -c 'ps -o ni= -p $$'
 10
nice -n 5 bash -c 'ps -o ni= -p $$'
  5

Werte außerhalb des Bereichs werden ohne Fehler auf den Grenzwert gesetzt; -n 50 läuft also mit 19.

nice -n 50 bash -c 'ps -o ni= -p $$'
 19

Nur root kann einen Prozess mit einem negativen Wert vorziehen. Ein normaler Benutzer erhält die Warnung [cannot set niceness], und der Befehl läuft trotzdem mit nice 0.

# als normaler Benutzer
nice -n -5 bash -c 'ps -o ni= -p $$'
nice: cannot set niceness: Permission denied
  0
# als root
nice -n -5 bash -c 'ps -o ni= -p $$'
 -5

Auch Kindprozesse, die ein mit nice gestarteter Befehl startet, laufen mit demselben nice-Wert.

nice -n 7 bash -c 'sleep 1 & ps -o ni= -p $!'
  7

Startest du also ein Skript mit nice, steckt jeder Befehl darin zurück.

3️⃣ renice: nice-Wert eines laufenden Prozesses ändern

nice legt den Wert nur beim Start fest, einen bereits laufenden Prozess änderst du daher mit renice. Prüfe zuerst PID und aktuellen Wert in der NI-Spalte von top oder mit ps.

ps -o pid,ni,cmd -p 201643
    PID  NI CMD
 201643   5 sleep 600
renice -n 10 -p 201643
201643 (process ID) old priority 5, new priority 10

Wie die Ausgabe zeigt, addiert renice -n nicht zum aktuellen Wert, sondern setzt den angegebenen Wert: Heraus kommt 10, nicht 5 + 10 = 15. Das ist nicht wie ein Druck auf ▲ an der Fernbedienung der Klimaanlage, der eine Stufe höher schaltet, sondern wie das Einstellen der Wunschtemperatur auf 24 Grad.

Auch die offizielle util-linux-Dokumentation beschreibt -n als absoluten Wert; das Addieren übernimmt in neueren Versionen die Option [--relative]. Im getesteten util-linux 2.37.4 gab es diese Option noch nicht.

Ein normaler Benutzer kann den Wert seiner eigenen Prozesse nur erhöhen und einen einmal erhöhten Wert nicht wieder senken.

# als normaler Benutzer
renice -n 10 -p 201649
201649 (process ID) old priority 0, new priority 10
renice -n 5 -p 201649
renice: failed to set priority for 201649 (process ID): Permission denied

root kann ihn auch senken; im selben Test wurde 10 direkt auf 3 geändert.

🔲 Simulator für nice · renice

Im Simulator unten, angemeldet als normaler Benutzer, kannst du nice und renice selbst eingeben und sehen, wie sich der nice-Wert ändert.

Simulator für den Befehl nicenice 8.32 · renice 2.37.4
[root@server work]#
Läuft nur in deinem Browser und berührt keinen echten Prozess. Der virtuelle Server ist als normaler Benutzer angemeldet: Starte etwas mit geändertem nice-Wert oder ändere mit renice den Wert von backup.sh (PID 2481) und prüfe ihn dann mit ps -o pid,ni,cmd. Mit den Tasten ↑↓ holst du frühere Befehle zurück.

4️⃣ CPU-Anteil bei Konkurrenz gemessen: nice 0 vs. 0·10·19

Ein höherer nice-Wert macht einen Task nicht immer langsamer. Sein Anteil sinkt nur, wenn er mit einem anderen Task um dieselbe CPU konkurriert.

Zwei Tasks wurden an einen einzigen CPU-Kern gebunden (taskset) und führten gleichzeitig das folgende Skript aus, das 5 Sekunden lang hochzählt. Je höher die Zahl, desto mehr CPU-Zeit hat der Task bekommen.

#!/bin/bash
end=$((SECONDS+5)); n=0
while [ $SECONDS -lt $end ]; do n=$((n+1)); done
echo $n

Das Skript erhöht n so lange um 1, bis 5 Sekunden vergangen sind, und gibt dann den letzten Wert aus.

📊5 Sekunden Konkurrenz um einen CPU-KernIn 5 Sekunden gezählt
Erster Task nice 0Zweiter Task
nice 0 vs nice 0
Zwei Tasks mit gleichem Gewicht.
0250.000500.000750.0001 Mio.
nice 0497.59648.8%
nice 0522.04051.2%
nice 0 vs nice 10
Nur der zweite Task läuft mit nice 10.
0250.000500.000750.0001 Mio.
nice 0979.97190.1%
nice 10107.6719.9%
nice 0 vs nice 19
Nur der zweite Task läuft mit nice 19.
0250.000500.000750.0001 Mio.
nice 0909.89598.6%
nice 1913.0101.4%
Werte vom 17. Oktober 2026 auf einem AlmaLinux-9-Server: beide Tasks an einen CPU-Kern gebunden und gleichzeitig je 5 Sekunden ausgeführt.

Zwei nice-0-Tasks teilten sich die Zeit zur Hälfte, nice 10 bekam etwa 10 % und nice 19 nur 1,4 %. Das entspricht den aus den Kernel-Gewichten berechneten Verhältnissen (1024 : 110 ergibt 90,3 : 9,7, 1024 : 15 ergibt 98,6 : 1,4).

Allein auf demselben Kern erreichte der nice-19-Task in 5 Sekunden etwa 650.000 bis 1.140.000 Zählungen. Ohne Konkurrenz nutzt auch nice 19 die CPU voll; die Serverlast (Load Average) lag während des Tests bei 3 bis 5.

5️⃣ ionice: beim Datenträger zurückstecken und den Scheduler prüfen

nice regelt nur den CPU-Anteil; Aufgaben, die lange auf den Datenträger lesen und schreiben – etwa Backups –, lassen mit ionice auch beim Datenträger anderen den Vortritt. Mit -c3 (idle) werden sie nur bedient, wenn kein anderes Programm den Datenträger nutzt.

ionice -c3 bash -c 'ionice -p $$'
idle
ionice -p $$
none: prio 0

Ein Prozess ohne Angabe wird als [none] angezeigt; laut Kernel-Dokumentation gilt er als best-effort, und seine Priorität wird aus dem CPU-nice-Wert berechnet.

ionice-Klassen wirken nur, wenn der Datenträger-Scheduler sie unterstützt; die Kernel-Dokumentation nennt bfq und mq-deadline als unterstützte Scheduler. Der in eckigen Klammern angezeigte ist der aktuell genutzte Scheduler.

cat /sys/block/nvme0n1/queue/scheduler
[none] mq-deadline kyber bfq

Die NVMe-Platte des Testservers nutzt [none]; laut offizieller Dokumentation kann ionice dort also wirkungslos sein – die Wirkung wurde nicht eigens gemessen. Den Namen des Datenträgers zeigt lsblk.

6️⃣ Wo nice sinnvoll ist: Backups · Cron · wp-cli

nice gehört vor Aufgaben, die lange dauern, aber nicht eilig sind. Das Komprimieren von Backups beansprucht CPU und Datenträger zugleich, daher setzt du nice und ionice zusammen.

nice -n 19 ionice -c3 tar czf backup.tgz /home/example

Bremst eine bereits laufende Aufgabe den Server aus, suchst du in top die PID und erhöhst den Wert mit renice; bei täglich laufenden Cron-Jobs setzt du nice vor den Befehl.

0 3 * * * nice -n 10 /usr/local/bin/backup.sh

Führst du auf einem WordPress-Server große wp-cli-Aufgaben wie Suchen und Ersetzen oder das Neuerzeugen von Bildern mit nice -n 10 aus, bekommt bei ausgelasteter CPU zuerst php-fpm die CPU, das die Besucheranfragen bearbeitet.

nice -n 10 wp media regenerate --yes

Umgekehrt erhöhst du den nice-Wert von php-fpm oder dem Webserver selbst nicht. Stecken die Prozesse zurück, die Besuchern antworten, reagieren Seiten bei ausgelasteter CPU langsamer.

🔢 FAQ & empfohlene Inhalte

Bei normalen Prozessen zeigt top PR als 20 plus nice-Wert. Ein mit nice 5 gestarteter Prozess erschien mit PR 25 und NI 5, während die PRI-Spalte von ps anders rechnet und denselben Prozess mit 14 anzeigte.

nice addiert den angegebenen Wert zum aktuellen nice-Wert. [nice -n 5 nice -n 3 nice] gibt 8 aus – anders als renice -n, das den angegebenen Wert setzt.

Trägst du [Nice=] im Abschnitt [Service] der Unit-Datei ein, legt das den nice-Wert der Prozesse fest, die der Dienst startet. Laut offizieller systemd.exec-Dokumentation sind -20 bis 19 möglich.

🧭 Prozesse und Zeitplanung: empfohlene Inhalte 11 Beiträge · 4 Referenzen
🗂️ Prozesse und Zeitplanung
📄 ps-Befehl 📄 top-Befehl 📄 Linux-Befehl nice 📄 kill-Befehl 📄 killall-Befehl 📄 Hintergrund & Vordergrund 📄 uptime-Befehl
📄 crontab einrichten
📋 WP CLI: Installation und Einrichtung 📄 WP-Cron(wp-cron.php) 📄 Synchronisierte Vorlagen finden: WP-CLI
📡 GNU Coreutils nice invocation 📡 renice(1) Linux manual page 📡 Block io priorities (Kernel-Doku) 📡 sched_prio_to_weight (Kernel-Quellcode)

ℹ️ Affiliate-Hinweis
Die Inhalte dieser Website enthalten Affiliate-Links. Kauft ein Besucher über einen dieser Links ein Produkt oder eine Dienstleistung, erhält die Website vom Verkäufer eine Provision. Der Betrag, den der Käufer zahlt(bei Aktionsrabatten sinkt er ↓), steigt dadurch nicht. Angegebene Preise, Rabatte und Lagerbestände entsprechen dem Stand bei Erstellung und können abweichen; prüfe sie daher vor dem Kauf beim Verkäufer. Produkte werden nach eigenen Kriterien ausgewählt und bewertet, und Provisionen beeinflussen weder die Reihenfolge noch den Inhalt der Bewertungen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Beweisen Sie, dass Sie ein Mensch sind: 7   +   4   =