ADMIN-Tipp: Nettigkeiten unter Linux

Jede Woche erscheint in unserem Newsletter ein neuer ADMIN-Tipp. Eine Sammlung aller Tipps finden Sie im Archiv der ADMIN-Tipps.

Der Nice-Wert bestimmt die Priorität, mit der ein Linux-Prozess auf die CPU zugreift. Ionice erledigt das gleiche für Lese- und Schreibzugriffe auf Platten.

Reicht die Rechenleistung auf dem Rechner nicht aus, bestimmt unter Linux der Kernel-Scheduler, welcher Prozess als nächstes an der Reihe ist -- da normalerweise einige Hundert Prozesse laufen, hat er immer etwas zu tun, aber ohne rechenintensive Anwendungen genügt in der Regel selbst ein durchschnittlicher Prozessor, um jedem Prozess die benötigte Rechenzeit zuzuweisen. Ist dies nicht der Fall, setzt der nice-Befehl Prioritäten nach Bedarf.

Ein Prozess mit einem hohen Nice-Wert lässt anderen gerne den Vortritt, 19 ist der höchste Nettigkeitswert. Ein negativer Wert von bis zu -20 macht einen Prozess hingegen zum Drängler, der die Freundlichkeit von Prozessen mit höherem Nice-Wert gerne ausnutzt und mehr CPU-Zeit in Beschlag nimmt. Ohne weitere Angaben startet ein normaler Benutzerprozess mit einem Nice-Wert von 0. Wichtige Systemprozesse laufen mit einer negativen Niceness, beispielsweise KWorker, der sich um die Koordination der Kernel-Worker-Threads kümmert. Unter anderem enthüllt das Top-Kommando zu jedem laufenden Prozess in der Spalte NI die gesetzte Niceness.

Das Kommando nice verwendet den System-Call nice() und startet einen Befehl, beispielsweise eine Bash-Shell, mit erhöhtem Nice-Wert, also niedriger Priorität:

nice -n 10 bash

Um die Priorität zu erhöhen, setzt man hier einen negativen Wert; allerdings kann das nur Root. Fehlt der Parameter -n, setzt Nice die Nettigkeit standardmäßig um 10 hinauf. Der Wert steht immer in Relation zur Niceness der aktuellen Umgebung. Startet man beispielsweise eine Shell mit nice bash, laufen alle darin gestarteten Kindprozesse mit einen Nice-Wert von 10. Ruft man darin eine weitere Shell mit nice -n 5 bash auf, erhält das neu gestartete Programm einen Nice-Wert von insgesamt 15.

Das Kommando renice hingegen ändert die Niceness laufender Prozesse. Es verwendet die System-Calls setpriority() und getpriority(), um die bestehende Niceness von Prozessen auszulesen und anzupassen. Dabei kann jeder Benutzer, abgesehen vom Root-User, nur seine eigenen Prozesse rekalibrieren und die Niceness nur erhöhen, nicht senken. Der Aufruf erfolgt durch die Angabe des gewünschten Nice-Werts und einer oder mehrerer Prozess-IDs:

renice +10 -p 22807 -p 23054

Weitere Parameter erlauben die Spezifikation zu ändernder Prozesse: --user oder -u ändert etwa die Niceness der Prozesse eines über den Benutzernamen angegebenen Users, -g oder --pgrp manipuliert alle Prozesse einer Gruppe, die per Gruppen-ID definiert wird.

renice +10 --user carsten

Die Prozessorleistung bildet jedoch nicht immer das Nadelöhr. Bei vielen Anwendungen fressen die Zugriffszeiten auf die Festplatte die meiste Zeit und verlangsamen Prozesse. In diese Bresche springt das Tool Ionice. Es ordnet Anwendungen in drei Klassen ein: Idle (1), Best-Effort (2) und Realtime (3). In der erstgenannten erhält ein Prozess nur dann Lese- oder Schreibzugriff, wenn kein anderer ihn benötigt. Realtime spiegelt das Gegenstück wieder, ein dieser Klasse zugeordneter Prozess erhält stets als erstes I/O-Zugriff. Weil damit die Gefahr einhergeht, dass andere Prozesse gar nicht mehr weiterlaufen, kann ausschließlich Root diese Klasse vergeben.

Die Klassen Best-Effort und Realtime kennen Prioritätswerte von 0-7; bei Idle-Prozessen gibt es keine weiteren Unterschiede. Da die meisten Prozesse üblicherweise in der Standardklasse Best-Effort laufen, gibt unter diesen die Priorität den Ausschlag. Auch hier gilt: Der Wert spiegelt den Grad der Rücksichtnahme eines Prozesses wieder, 0 hat daher die höchste Priorität. Die Angabe der Klasse erfolgt über den Parameter -c gefolgt von 1 (Idle), 2 (Best-Effort) oder 3 (Realtime). Die Priorität spezifiziert der Parameter -n. So startet man eine Bash-Shell in der Best-Effort-Klasse mit höchster Priorität:

ionice -c 2 -n 0 bash

Ionice fungiert zugleich als Pendant von Renice und ändert auch die Priorität laufender Prozesse. Dazu erfolgt die Angabe einer oder mehrerer Prozess-IDs mit -p. Der folgende Befehl ordnet den Prozess 22043 der Best-Effort-Klasse mit der Priorität 4 zu:

ionice -c 2 -n 4 -p 22043

Ohne Definition einer Klasse oder Priorität informert Ionice über die aktuelle Priorität eines Prozesses. Sie liegt standardmäßig, also auch wenn der Programmstart ohne Ionice erfolgt ist, bei 0.

$ ionice -p 22043
unbekannter: prio 4

Ionice und Nice lassen sich auch kombinieren. Um eine Shell mit niedriger CPU- und I/O-Priorität zu starten, dient etwa dieses Kommando:

nice -n 19 ionice -c 2 -n 7 bash
07.01.2014
comments powered by Disqus

Artikel der Woche

Rechneranalyse mit Microsoft-Sysinternals-Tools

Der Rechner verhält sich eigenartig oder Sie haben eine unbekannte Applikation im Task Manager entdeckt und möchten erfahren, worum es sich dabei genau handelt und ob sie möglicherweise gefährlich ist? In so einem Fall helfen die Sysinternals-Tools von Microsoft. Dieser Beitrag stellt die drei Werkzeuge Autoruns, Process Explorer und TCPView vor. (mehr)
Einmal pro Woche aktuelle News, kostenlose Artikel und nützliche ADMIN-Tipps.
Ich habe die Datenschutzerklärung gelesen und bin einverstanden.

Konfigurationsmanagement

Ich konfiguriere meine Server

  • von Hand
  • mit eigenen Skripts
  • mit Puppet
  • mit Ansible
  • mit Saltstack
  • mit Chef
  • mit CFengine
  • mit dem Nix-System
  • mit Containern
  • mit anderer Konfigurationsmanagement-Software

Google+

Ausgabe /2018