Das Programm Top ist sicherlich den meisten ein Begriff. Beim Aufruf in einem Terminalfenster mit dem Befehl „top“ werden einem mehr oder weniger übersichtlich Informationen zu den Systemressourcen und den laufenden Prozessen angezeigt.
Im Gegensatz zum beliebten Htop, welches den gleichen Zweck etwas übersichtlicher erfüllt, ist Top bei den meisten Linuxdistributionen standardmäßig installiert. Das Vorhandensein von Top auf einem Linuxrechner kann quasi vorausgesetzt werden. Auch wenn man auf einem System arbeitet auf dem Htop nicht installiert ist und man nicht die Rechte hat Programme nachzuinstallieren, kann man mit Top einen Überblick über die verfügbaren und verwendeten Systemressourcen sowie die laufenden Prozesse gewinnen.
Ich dachte also dass es sich lohnt sich einmal etwas genauer mit Top auseinanderzusetzen.
Top kann ohne weitere Parameter mit dem Befehl top aufgerufen werden und empfängt einen dann mit folgender Übersicht
Interessanterweise sind die Bezeichnungen auf einem deutschen Ubuntu teilweise deutsch und teilweise englisch. Das macht einen seltsamen und unschönen Eindruck.
1. Der Aufbau
Die 1. Zeile – top
Die erste Zeile mit der Bezeichnung Top gibt allgemeine Infos zum System.
09:42:24 ist die aktuelle Uhrzeit
up 27 min gibt an wie lange das System bereits läuft
2 users ist die Anzahl der Usersessions. Hier darf man nicht erschrecken wenn man alleine am Computer sitzt, aber trotzdem zwei User angezeigt werden. Jedes Terminalfenster das geöffnet wird erzeugt eine neue Usersession und erhöht somit die hier angezeigte Anzahl an Nutzern um 1.
load average: 0,08, 0,19, 0,15 gibt die Load Average für die letzte Minute, die letzten 5 Minuten und die letzten 15 Minuten an. Load Average gibt die durchschnittliche Systemlast an und darf nicht mit der Prozessorauslastung verwechselt werden. Sie kann eher mit einer Warteschlange für Aufgaben verglichen werden, die vom Prozessor abgearbeitet werden müssen. So kann evtl. die Prozessorauslastung sehr niedrig sein, die Load Average jedoch sehr hoch weil die Festplatte ausgelastet ist und nicht in der Lage ist die angeforderten Daten schnell genug zu liefern. Bei einer Load Average von null stehen alle Systemresourcen zur Verfügung. Steigt die Auslastung des Systems, dann steigt auch die Load Average an, wobei es nach oben keine Grenze gibt. Bis zu welchem Wert ein System zuverlässig arbeitet ist abhängig von den Systemresourcen, insbesondere davon wie stark die CPU ausgelastet ist und wie schnell die Festplatte die angeforderten Daten liefern kann.
Die 2. Zeile – Aufgaben
Die nächste Zeile trägt auf deutsch die Bezeichnung Aufgaben und im englischen die Bezeichnung Tasks und gibt Informationen zu den laufenden Prozessen aus.
260 total gibt die Gesamtzahl der gestarteten Prozesse an.
1 running ist die Anzahl der Prozesse die gerade Daten verarbeiten, oder in der Warteschlange stehen um Daten zu verarbeiten.
259 sleeping ist die Zahl von Prozessen die laufen, jedoch auf ein Ereignis warten um Daten zu verarbeiten.
0 stopped: Anzahl der Prozesse die pausiert wurden.
0 zombie: Zombieprozesse sind Prozesse die eigentlich bereits beendet wurden, aber nicht aus der Tabelle mit aktiven Prozessen entfernt wurden. Zombieprozesse stellen in der Regel kein Problem dar, können aber darauf hinweisen dass es bei diesem Prozess zu einem Fehler kam.
Die 3. Zeile – Cpu(s)
In der dritten Zeile werden Informationen zum Zustand des Prozessors ausgegeben.
Die Zahlen stehen hier für CPU-Auslastung in Prozent.
be: Be steht hier für Benutzer, im englischen stehen hier die Buchstaben us für User. 1% der CPU werden für das Ausführen von Benutzerprozessen mit Standardpriorität verwendet
sy: 1,2% der CPU werden verwendet um vom Systemprozesse auszuführen
ni: CPU-Zeit die für Prozesse mit geändertem Nice-Wert, also geänderter Priorität, verwendet wird.
un: steht evtl. für untätig?? Im englischen steht hier id für idle und gibt an wie lange sich der Prozessor im Leerlauf befindet.
wa: wait, also Wartezeit die das System damit verbringt auf den Abschluss von I/O Operationen zu warten, z.B. wenn die Festplatte ausgelastet ist und nicht schnell genug Daten an den Prozessor liefern kann.
hi: CPU Zeit für das verarbeiten von Hardwareinterrupts. Ein Hardwareinterrupt kann die Verarbeitung eines laufenden Programms vorübergehend unterbrechen um eine andere, oft zeitkritische Aufgabe abzuarbeiten, z.B. eine Tastatureingabe.
si: CPU Zeit für das Verarbeiten von Softwareinterrupts
st: Die Angabe Steal Time ist nur auf virtuellen Maschinen relevant und ist auf Hardwaremaschinen immer null. Sie gibt an wie viel CPU Zeit der Hypervisor von dieser virtuellen Maschine „gestohlen“ hat um andere Aufgaben durchzuführen.
Alle Zahlen zusammen ergeben 100% und stellen eine Zusammenfassung aller CPU Kerne dar. Wer die Auslastung der einzelnen Kerne angezeigt bekommen möchte kann einfach bei laufendem Top die Taste 1 drücken. Die Ansicht ändert sich dann folgendermaßen:
Hierbei handelt es sich um eine 4-Kern CPU mit Hyperthreading. Es handelt sich also nicht wie hier dargestellt um acht physische Kerne, jedoch können acht Threads gleichzeitig abgearbeitet werden. Dies kann evtl zu Verwirrung führen.
Die Reihen 4+5 – Ram und Swap
In den Reihen vier und fünf findet man Informationen zum RAM (KiB Mem) und zum Swap, bzw. Auslagerungsspeicher (KiB Swap). Auf dem hier verwendeten Gerät ist kein Swapspeicher konfiguriert, daher sind die Werte null.
KiB Mem/Swap gibt den gesamten verfügbaren Haupt- bzw. Auslagerungsspeicher in Kibibyte an.
Used und free gibt dementsprechend den belegten und freien Speicher an.
In buffers/cached Mem werden Informationen vorgehalten die schon einmal vom System berechnet und verwendet wurden. Sollten die selben Informationen erneut benötigt werden müssen sie nicht neu berechnet werden sondern können aus dem Buffer gelesen werden. Wenn genug Speicher zur Verfügung steht dient dies der Beschleunigung des Systems. Wenn der Speicherplatz knapp wird kann der Buffer/Cache geleert werden und der Speicherplatz steht anderen Programmen zur Verfügung.
Weitere Reihen – Die laufenden Prozesse
Nun folgen viele Zeilen mit Informationen zu den gerade laufenden Prozessen
PID: die Prozess-ID
BENUTZER: (in der englischen Version USER) ist der Name des Benutzers, der den Prozess gestartet hat.
PR: Die Prozesspriorität wie sie vom Kernel gesehen wird. Standardwert ist 20.
NI: Nice Wert zur Anpassung der Priorität durch den User.
Hier wurde ein Nice-Wert von -20 vergeben. Die Priorität des Prozesses erhöht sich dadurch auf 0.
Ein Nice-Wert von -20 ist hierbei die höchste Priorität die vergeben werden kann.
VIRT: Virtueller Speicher enthält allen Code, Daten und Shared-Libraries, Seiten (Speicher Blöcke) die ausgelagert wurden, sowie Seiten für die eine Nutzung geplant wurde, die derzeit aber noch nicht genutzt werden. VIRT ist somit sehr viel höher als der tatsächlich genutzte Arbeitsspeicher.
RES: (resident) Anteil der im physischen Speicher liegt, und nicht ausgelagert wurde. Auch hier kann es zu Überschneidungen kommen, wenn mehrere Programme die gleichen Bibliotheken verwenden. Somit kann auch die Summe von RES höher sein als der tatsächlich belegte Speicher.
SHR: (shared) gibt den Speicherplatz an der evtl mit anderen Programmen geteilt wird.
Der tatsächlich von einem Prozess verwendete Hauptspeicher liegt also irgendwo zwischen RES und RES-SHR, abhängig davon wie viele Prozesse diese gemeinsam genutzten Bibliotheken nutzen.
S: Status des Prozesses. Es stehen folgende Status zur Verfügung: ‚D‘ = uninterruptible sleep, ‚R‘ = running, ‚S‘ = sleeping, ‚T‘ = traced or stopped, ‚Z‘ = zombie.
%CPU: Prozessorzeit in Prozent die für diesen Prozess genutzt wird.
%Mem: Verwendeter Anteil am Physikalischen Arbeitsspeicher in Prozent.
TIME+: Prozessorzeit die der Prozess seit seinem Start genutzt hat in Minuten:Sekunden.Hundertstel Sekunden.
Command: Der Name des Prozesses
2. Die Nutzung
Top kann mit mehreren nützlichen Parametern gestartet werden. Außerdem bietet das Programm eine Vielzahlt an Hotkeys an, die im laufenden Betrieb genutzt werden um Einstellungen anzupassen. Ein paar sind hier beschrieben, alle listet die umfangreiche Manpage auf die man im Terminal mit „man top“ erreicht und mit „q“ wieder verlässt.
Die Startoptionen
top -c
zeigt das vollständige Kommando das ausgeführt wurde und nicht nur den Namen des Prozesses
top -d ss.tt
Standardmässig aktualisiert sich top alle 3 Sekunden. Mit diesem Befehl kann das Aktualisierungsintervall selbst eingestellt werden in Sekungen.Hundertstel Sekunden. Der Befehl top -d 5.0 setzt das Aktualisierungsinterval auf 5 Sekunden.
top -i
Wenn Top mit diesem Befehl aufgerufen wird werden nur laufende Prozesse angezeigt. Schlafende Prozesse werden ausgeblendet.
top -u www-data
zeigt nur die Prozesse des Benutzers www-data an. www-data kann hierbei durch jeden vorhandenen Benutzername ersetzt werden
Hotkeys
Hotkeys sind Tasten oder Tastenkombinationen die bei bereits laufendem Programm gedrückt werden um eine Einstellung vorzunehmen.
Farbe anpassen
Z bzw. Shift+z färbt das Terminal ein. Der Nutzen erschliesst sich mir bisher noch nicht, aber prinzipiell ist es immer gut wenn man Programme anpassen kann. Es stehen mehrere Möglichkeiten und Farben zur Auswahl. Die gewünschte Konfiguration wird bei Nutzung des Hotkeys abgefragt.
Sortierung anpassen
P bzw. Shift+p sortiert die Ausgabe nach CPU Last
M bzw. Shift+m sortiert nach Speicherplatzverbrauch
T bzw. Shift+t sortiert die Ausgabe nach verwendeter CPU Zeit
Einstellungen speichern
W bzw. Shift+w schreibt die aktuelle Optionsauswahl in die Konfigurationsdatei, so dass die gewählten Optionen nicht bei jedem Aufruf von Top neu gewählt werden müssen.
Prozesse beenden
„k“ sendet ein Kill Signal an eine gewünschte Prozess-ID. Die ID wird bei Benutzung des Hotkeys abgefragt.
Prozesse einzelner Benutzer anzeigen
U bzw Shift+u fragt nach einem Benutzernamen. Anschließend werden nur Prozesse des gewählten Nutzers angezeigt.
Prozesspriorität anpassen
Mit dem Hotkey „r“ lässt sich die Prozesspriorität über den Nice-Wert neu setzen. Dabei stellt -20 die höchste und +19 die niedrigste Priorität dar.
Anzahl der angezeigten Prozesse einstellen
Mit „n“ lässt sich die Anzahl an angezeigten Prozessen einstellen. Ein wert von null zeigt dabei alle laufenden Prozesse an. Mit den Cursortasten kann man durch die Liste scrollen.
Zusätzliche Felder hinzufügen
Ich habe im oberen Teil dieses Artikels die standardmäßig von Top angezeigten Felder beschrieben. Allerdings lassen sich noch weitere Felder hinzufügen, oder welche entfernen. Je nachdem welche Informationen man gerade benötigt.
Dies geschieht mit dem Hotkey „f“. Dann erhält man eine Auswahl an verfügbaren Feldern, durch die man sich mit den Cursortasten bewegen und die Position festlegen kann.
Schluss
Nachdem ich mich nun einige Stunden mit Top auseinandergesetzt habe bin ich überrascht wie mächtig und vielfältig diese Programm doch ist, dies war mir vorher nicht klar. Zwar ist es optisch weniger ansprechend und auch die Bedienung ist weit weniger intuitiv als bei Htop, trotzdem erfüllt es seinen Zweck nach wie vor sehr gut.
Letztendlich ist es ein bisschen wie mit dem Texteditor vi. Man findet das Programm auf jedem Linuxsystem vor und insofern kann es durchaus einmal hilfreich sein wenn man zumindest die grundlegenden Funktionen kennt.
5 Comments
danke. solche grundlage artikel mag ich. ich finde immerwieder neues, das ich noch nicht wusste. auch sind nicht alle als profis geboren 😉
Schöner Überblick :).
Über einen kleinen Fehler bin ich noch gestolpert:
„top -u root
zeigt nur die Prozesse des Benutzers www-data an.“
… sollte wohl ‚top -u www-data‘ lauten (damit’s auch zum Screenshot passt)
Vielen Dank für das Lob und den Hinweis.
Hast natürlich recht. Ich Habe den Fehler korrigiert.
Sehr übersichtlich, liest sich sehr fliessend, top 🙂
Wer htop noch nicht kennt, sollte stattdessen das mal ausprobieren.