EMZETT.
Login

nice, renice und ulimit: Prozessen Grenzen setzen

Kurz: Mit nice steuert man, wie wichtig ein Prozess dem Scheduler ist; mit ulimit begrenzt man Ressourcen wie offene Dateien oder Speicher.

Genauer: Auf einem Rechner laufen viele Prozesse um die Rechenzeit. Der Scheduler des Kernels verteilt sie nach Priorität. Mit nice lässt sich beeinflussen, wie freundlich sich ein Prozess verhält, und mit ulimit (Resource Limits) verhindert man, dass ein Programm zu viele Ressourcen verbraucht.

Im Detail

nice und renice

Der Nice-Wert reicht von −20 (höchste Priorität) bis +19 (niedrigste, „nett zu anderen“). Normal ist 0. Normale Benutzer dürfen den Wert nur erhöhen, also ihre Prozesse ausbremsen; nur root darf niedrigere Werte setzen.

nice -n 10 ./langer-job.sh         # mit niedriger Priorität starten
renice -n 15 -p 1234               # laufenden Prozess ändern
ionice -c3 tar czf backup.tgz /daten   # niedrige Festplatten-Priorität

So läuft ein Backup im Hintergrund, ohne den Rechner zu verlangsamen. Die Spalte NI in top und htop zeigt den Wert.

ulimit: Ressourcenlimits

ulimit -a            # alle aktuellen Limits
ulimit -n            # max. offene Dateien (Standard oft 1024)
ulimit -n 65535      # für diese Shell erhöhen
ulimit -v 2000000    # max. virtueller Speicher in KiB
ulimit -u 500        # max. Prozesse

Soft-Limits gelten aktuell und dürfen bis zum Hard-Limit angehoben werden. Dauerhaft setzt man sie in /etc/security/limits.conf bzw. limits.d/, für Dienste über LimitNOFILE= in der systemd-Unit. Server mit vielen Verbindungen (Webserver, Datenbanken) brauchen ein hohes Dateilimit, sonst erscheint „Too many open files“.

cgroups: moderne Begrenzung

Für feinere und gruppenweise Grenzen (CPU-Anteil, Speicherobergrenze, I/O) nutzt man cgroups, bequem über systemd: systemd-run --scope -p MemoryMax=500M -p CPUQuota=50% befehl. Container-Laufzeiten verwenden dieselbe Technik.

Hinweise

Der Nice-Wert ändert nur das Gewicht beim Scheduler, er gibt keine Garantie. Echtzeit-Prozesse (SCHED_FIFO, chrt) haben eigene Prioritäten. Ein zu niedriges Speicherlimit lässt Programme abstürzen statt langsamer zu werden; der OOM-Killer greift bei Speichermangel des Gesamtsystems ein.

Siehe auch: Prozesse und Signale, Prozess-Scheduling, Namespaces und cgroups, Speicherverwaltung und OOM-Killer