Articles

Boolean World

Mit dem Befehl „Top“ können Benutzer Prozesse und die Nutzung von Systemressourcen unter Linux überwachen. Es ist eines der nützlichsten Werkzeuge im Werkzeugkasten eines Sysadmins und ist auf jeder Distribution vorinstalliert. Im Gegensatz zu anderen Befehlen wie ps ist er interaktiv, und Sie können die Liste der Prozesse durchsuchen, einen Prozess beenden und so weiter.

In diesem Artikel werden wir verstehen, wie man den Befehl top verwendet.

Anfangen

Wie Sie vielleicht schon erraten haben, müssen Sie einfach dies eingeben, um top zu starten:

top

Damit wird eine interaktive Kommandozeilenanwendung gestartet, ähnlich wie in dem Screenshot unten. Die obere Hälfte der Ausgabe enthält Statistiken über Prozesse und Ressourcenauslastung, während die untere Hälfte eine Liste der aktuell laufenden Prozesse enthält. Mit den Pfeiltasten und den Bild-Auf/Ab-Tasten können Sie durch die Liste blättern. Wenn Sie beenden wollen, drücken Sie einfach „q“.

Es gibt eine Reihe von Varianten von top, aber im Rest dieses Artikels werden wir über die gängigste Variante sprechen – die, die mit dem „procps-ng“-Paket kommt. Sie können dies überprüfen, indem Sie folgendes ausführen:

top -v

Wenn Sie diese Variante haben, wird dies in der Ausgabe so angezeigt:

procps-ng version 3.3.10

In der Benutzeroberfläche von top geht einiges vor sich, daher werden wir sie im nächsten Abschnitt Stück für Stück aufschlüsseln.

Die Oberfläche von Top verstehen: der Übersichtsbereich

Wie wir bereits gesehen haben, ist die Ausgabe von Top in zwei verschiedene Bereiche unterteilt. In diesem Teil des Artikels werden wir uns auf die Elemente in der Hälfte der Ausgabe konzentrieren. Dieser Bereich wird auch als „Übersichtsbereich“ bezeichnet.

Systemzeit, Betriebszeit und Benutzersitzungen

Ganz oben links auf dem Bildschirm (wie im Screenshot oben markiert) zeigt top die aktuelle Zeit an. Danach folgt die Betriebszeit des Systems, die uns sagt, wie lange das System schon läuft. In unserem Beispiel ist die aktuelle Zeit „15:39:37“, und das System läuft seit 90 Tagen, 15 Stunden und 26 Minuten.

Als nächstes folgt die Anzahl der aktiven Benutzersitzungen. In diesem Beispiel gibt es zwei aktive Benutzersitzungen. Diese Sitzungen können entweder auf einem TTY (physisch auf dem System, entweder über die Befehlszeile oder eine Desktop-Umgebung) oder einem PTY (z. B. in einem Terminalemulator-Fenster oder über SSH) stattfinden. Wenn Sie sich an einem Linux-System über eine Desktop-Umgebung anmelden und dann einen Terminalemulator starten, werden Sie feststellen, dass es zwei aktive Sitzungen gibt.

Wenn Sie mehr Details über die aktiven Benutzersitzungen erhalten möchten, verwenden Sie den Befehl who.

Speichernutzung

Der Bereich „Speicher“ zeigt Informationen zur Speichernutzung des Systems. Die Zeilen mit der Bezeichnung „Mem“ und „Swap“ zeigen Informationen zum RAM bzw. zum Swap Space. Einfach ausgedrückt, ist ein Swap Space ein Teil der Festplatte, der wie RAM genutzt wird. Wenn der Arbeitsspeicher fast voll ist, werden selten genutzte Bereiche des Arbeitsspeichers in den Swap Space geschrieben, um später bei Bedarf abgerufen zu werden. Da der Zugriff auf Festplatten jedoch langsam ist, kann es die Systemleistung beeinträchtigen, wenn man sich zu sehr auf den Swap-Bereich verlässt.

Wie Sie natürlich erwarten würden, haben die Werte „total“, „free“ und „used“ ihre übliche Bedeutung. Der „avail mem“-Wert ist die Menge an Speicher, die Prozessen zugewiesen werden kann, ohne weiteres Swapping zu verursachen.

Der Linux-Kernel versucht außerdem, die Zugriffszeiten auf die Festplatte auf verschiedene Weise zu reduzieren. Er unterhält einen „Festplatten-Cache“ im RAM, in dem häufig benutzte Bereiche der Festplatte gespeichert werden. Außerdem werden Schreibvorgänge auf der Festplatte in einem „Festplattenpuffer“ gespeichert, und der Kernel schreibt sie schließlich auf die Festplatte aus. Der gesamte von ihnen verbrauchte Speicher ist der „buff/cache“-Wert. Das mag wie etwas Schlechtes klingen, ist es aber nicht – der vom Cache verbrauchte Speicher wird bei Bedarf den Prozessen zugewiesen.

Tasks

Der Abschnitt „Tasks“ zeigt Statistiken über die auf Ihrem System laufenden Prozesse. Der Wert „Gesamt“ ist einfach die Gesamtzahl der Prozesse. Im obigen Screenshot laufen zum Beispiel 27 Prozesse. Um den Rest der Werte zu verstehen, benötigen wir ein wenig Hintergrundwissen darüber, wie der Linux-Kernel mit Prozessen umgeht.

Prozesse führen eine Mischung aus E/A-gebundener Arbeit (z. B. das Lesen von Festplatten) und CPU-gebundener Arbeit (z. B. das Ausführen von Rechenoperationen) aus. Die CPU ist im Leerlauf, wenn ein Prozess E/A-Arbeiten ausführt, sodass das Betriebssystem in dieser Zeit auf die Ausführung anderer Prozesse umschaltet. Außerdem erlaubt das Betriebssystem die Ausführung eines bestimmten Prozesses nur für eine sehr kurze Zeit und schaltet dann auf einen anderen Prozess um. Auf diese Weise erwecken Betriebssysteme den Anschein, als würden sie „Multitasking“ betreiben. Um all dies zu tun, müssen wir den „Zustand“ eines Prozesses im Auge behalten. In Linux kann ein Prozess in einem dieser Zustände sein:

  • Runnable (R): Ein Prozess in diesem Zustand wird entweder auf der CPU ausgeführt, oder er befindet sich in der Run-Queue und ist bereit, ausgeführt zu werden.
  • Unterbrechbarer Schlaf (S): Prozesse in diesem Zustand warten auf die Ausführung eines Ereignisses.
  • Ununterbrechbarer Ruhezustand (D): In diesem Fall wartet ein Prozess auf den Abschluss einer E/A-Operation.
  • Stopped (T): Diese Prozesse wurden durch ein Auftragssteuersignal (z. B. durch Drücken von Strg+Z) angehalten oder weil sie verfolgt werden.
  • Zombie (Z): Der Kernel verwaltet verschiedene Datenstrukturen im Speicher, um den Überblick über Prozesse zu behalten. Ein Prozess kann eine Reihe von Kindprozessen erzeugen, und diese können beendet werden, während der Elternprozess noch vorhanden ist. Diese Datenstrukturen müssen jedoch so lange beibehalten werden, bis der Elternprozess den Status der Kindprozesse erfährt. Solche beendeten Prozesse, deren Datenstrukturen noch vorhanden sind, werden als Zombies bezeichnet.

Prozesse in den Zuständen D und S werden als „schlafend“ dargestellt, solche im Zustand T als „angehalten“. Die Anzahl der Zombies wird als „Zombie“-Wert angezeigt.

CPU-Nutzung

Der Abschnitt CPU-Nutzung zeigt den prozentualen Anteil der CPU-Zeit, der für verschiedene Aufgaben verwendet wird. Der us-Wert ist die Zeit, die die CPU mit der Ausführung von Prozessen im Userspace verbringt. Der sy-Wert ist die Zeit, die für die Ausführung von Prozessen im Kernelspace aufgewendet wird.

Linux verwendet einen „nice“-Wert, um die Priorität eines Prozesses zu bestimmen. Ein Prozess mit einem hohen „nice“-Wert ist „netter“ zu anderen Prozessen und erhält eine niedrige Priorität. Analog dazu erhalten Prozesse mit einem niedrigeren „nice“-Wert eine höhere Priorität. Wie wir später sehen werden, kann der standardmäßige „nice“-Wert geändert werden. Die Zeit, die für die Ausführung von Prozessen mit einem manuell eingestellten „nice“-Wert aufgewendet wird, erscheint als niWert.

Danach folgt id, das ist die Zeit, die die CPU im Leerlauf bleibt. Die meisten Betriebssysteme versetzen die CPU in einen Energiesparmodus, wenn sie im Leerlauf ist. Als nächstes kommt der wa-Wert, der die Zeit angibt, die die CPU auf die Fertigstellung von E/A wartet.

Interrupts sind Signale an den Prozessor über ein Ereignis, das sofortige Aufmerksamkeit erfordert. Hardware-Interrupts werden typischerweise von Peripheriegeräten verwendet, um dem System Ereignisse mitzuteilen, wie z. B. einen Tastendruck auf einer Tastatur. Auf der anderen Seite werden Software-Interrupts durch bestimmte Anweisungen erzeugt, die auf dem Prozessor ausgeführt werden. In beiden Fällen kümmert sich das Betriebssystem um sie, und die Zeit, die für die Behandlung von Hardware- und Software-Interrupts aufgewendet wird, wird durch hi bzw. si angegeben.

In einer virtualisierten Umgebung wird ein Teil der CPU-Ressourcen an jede virtuelle Maschine (VM) vergeben. Das Betriebssystem erkennt, wenn es Arbeit zu erledigen hat, diese aber nicht ausführen kann, weil die CPU bei einer anderen VM beschäftigt ist. Die auf diese Weise verlorene Zeit ist die „Steal“-Zeit, dargestellt als st.

Last-Durchschnitt

Der Abschnitt Last-Durchschnitt stellt die durchschnittliche „Last“ über eine, fünf und fünfzehn Minuten dar. „Last“ ist ein Maß für die Menge der Rechenarbeit, die ein System leistet. Unter Linux ist die Last die Anzahl der Prozesse in den Zuständen R und D zu einem bestimmten Zeitpunkt. Der „Last-Durchschnittswert“ gibt Ihnen ein relatives Maß dafür, wie lange Sie warten müssen, bis die Dinge erledigt sind.

Lassen Sie uns ein paar Beispiele betrachten, um dieses Konzept zu verstehen. Auf einem Single-Core-System bedeutet ein Lastdurchschnitt von 0,4, dass das System nur 40 % der Arbeit erledigt, die es erledigen kann. Ein Lastdurchschnitt von 1 bedeutet, dass das System genau an der Kapazitätsgrenze ist – das System wird überlastet, wenn auch nur ein kleines bisschen zusätzliche Arbeit hinzugefügt wird. Ein System mit einem Last-Durchschnitt von 2,12 bedeutet, dass es mit 112% mehr Arbeit überlastet ist, als es bewältigen kann.

Bei einem Multi-Core-System sollten Sie zunächst den Last-Durchschnitt durch die Anzahl der CPU-Kerne teilen, um ein ähnliches Maß zu erhalten.

Zudem ist „Last-Durchschnitt“ eigentlich nicht der typische „Durchschnitt“, den die meisten von uns kennen. Es handelt sich um einen „exponentiell gleitenden Durchschnitt“, was bedeutet, dass ein kleiner Teil der vorherigen Lastdurchschnitte in den aktuellen Wert einfließt. Wenn Sie daran interessiert sind, deckt dieser Artikel alle technischen Details ab.

Die Oberfläche von Top verstehen: der Aufgabenbereich

Der Übersichtsbereich ist vergleichsweise einfacher und enthält eine Liste von Prozessen. In diesem Abschnitt lernen wir die verschiedenen Spalten kennen, die in der Standardausgabe von top angezeigt werden.

  • PID

Dies ist die Prozess-ID, eine eindeutige positive Ganzzahl, die einen Prozess identifiziert.

  • BENUTZER

Das ist der „effektive“ Benutzername (der auf eine Benutzer-ID abgebildet wird) des Benutzers, der den Prozess gestartet hat. Linux weist Prozessen eine echte und eine effektive Benutzerkennung zu; letztere erlaubt es einem Prozess, im Namen eines anderen Benutzers zu handeln. (Zum Beispiel kann sich ein Nicht-Root-Benutzer zu Root erheben, um ein Paket zu installieren.)

  • PR und NI

Das Feld „NI“ zeigt den „nice“-Wert eines Prozesses. Das Feld „PR“ zeigt die Scheduling-Priorität des Prozesses aus der Sicht des Kernels. Der „nice“-Wert beeinflusst die Priorität eines Prozesses.

  • VIRT, RES, SHR und %MEM

Diese drei Felder stehen im Zusammenhang mit dem Speicherverbrauch der Prozesse. „VIRT“ ist die Gesamtmenge des von einem Prozess verbrauchten Speichers. Dazu gehören der Code des Programms, die vom Prozess im Speicher abgelegten Daten sowie alle Speicherbereiche, die auf die Festplatte ausgelagert wurden. „RES“ ist der vom Prozess verbrauchte Speicher im RAM, und „%MEM“ drückt diesen Wert als Prozentsatz des gesamten verfügbaren RAM aus. Schließlich ist „SHR“ die Menge an Speicher, die mit anderen Prozessen geteilt wird.

  • S

Wie wir bereits gesehen haben, kann ein Prozess in verschiedenen Zuständen sein. Dieses Feld zeigt den Prozesszustand in der Einzelbuchstabenform an.

  • TIME+

Dies ist die gesamte CPU-Zeit, die der Prozess seit seinem Start verbraucht hat, auf die Hundertstelsekunde genau.

  • COMMAND

Die Spalte COMMAND zeigt den Namen des Prozesses an.

Beispiele für die Verwendung von Top-Befehlen

Bislang haben wir über die Schnittstelle von Top gesprochen. Es kann jedoch auch Prozesse verwalten, und Sie können verschiedene Aspekte der Ausgabe von top steuern. In diesem Abschnitt werden wir uns ein paar Beispiele ansehen.

In den meisten der folgenden Beispiele müssen Sie eine Taste drücken, während top läuft. Beachten Sie, dass diese Tastendrücke zwischen Groß- und Kleinschreibung unterscheiden – wenn Sie also „k“ drücken, während die Feststelltaste aktiviert ist, haben Sie tatsächlich ein „K“ gedrückt, und der Befehl wird nicht funktionieren oder etwas ganz anderes tun.

Prozesse beenden

Wenn Sie einen Prozess beenden wollen, drücken Sie einfach „k“, während top läuft. Daraufhin erscheint eine Eingabeaufforderung, in der Sie nach der Prozess-ID des Prozesses gefragt werden und die Eingabetaste drücken.

Nachfolgend geben Sie das Signal ein, mit dem der Prozess getötet werden soll. Wenn Sie dies leer lassen, verwendet top ein SIGTERM, das es Prozessen erlaubt, sich sanft zu beenden. Wenn Sie einen Prozess gewaltsam beenden wollen, können Sie hier SIGKILL eingeben. Sie können hier auch die Signalnummer eintippen. Zum Beispiel ist die Nummer für SIGTERM 15 und SIGKILL ist 9.

Wenn Sie die Prozess-ID leer lassen und direkt Enter drücken, wird der oberste Prozess in der Liste beendet. Wie wir bereits erwähnt haben, können Sie mit den Pfeiltasten scrollen und auf diese Weise den Prozess ändern, den Sie beenden möchten.

Sortieren der Prozessliste

Einer der häufigsten Gründe, ein Tool wie top zu verwenden, ist herauszufinden, welcher Prozess die meisten Ressourcen verbraucht. Sie können folgende Tasten drücken, um die Liste zu sortieren:

  • ‚M‘, um nach der Speichernutzung zu sortieren
  • ‚P‘, um nach der CPU-Nutzung zu sortieren
  • ‚N‘, um nach der Prozess-ID zu sortieren
  • ‚T‘, um nach der Laufzeit zu sortieren

Standardmäßig zeigt top alle Ergebnisse in absteigender Reihenfolge an. Sie können jedoch zu aufsteigender Reihenfolge wechseln, indem Sie ‚R‘ drücken.

Sie können die Liste auch mit dem -o-Schalter sortieren. Wenn Sie zum Beispiel Prozesse nach der CPU-Auslastung sortieren wollen, können Sie das mit:

top -o %CPU

Sie können die Liste nach jedem der Attribute im Übersichtsbereich auf die gleiche Weise sortieren.

Anzeigen einer Liste von Threads anstelle von Prozessen

Wir haben bereits angesprochen, wie Linux zwischen Prozessen wechselt. Leider teilen sich Prozesse keinen Speicher oder andere Ressourcen, was solche Wechsel ziemlich langsam macht. Linux unterstützt, wie viele andere Betriebssysteme auch, eine „leichtgewichtige“ Alternative, „Threads“ genannt. Sie sind Teil eines Prozesses und teilen sich bestimmte Bereiche des Speichers und andere Ressourcen, aber sie können wie Prozesse gleichzeitig ausgeführt werden.

Standardmäßig zeigt top in seiner Ausgabe eine Liste der Prozesse an. Wenn Sie stattdessen die Threads auflisten möchten, drücken Sie „H“, wenn top läuft. Beachten Sie, dass in der Zeile „Tasks“ stattdessen „Threads“ steht und die Anzahl der Threads statt der Prozesse angezeigt wird.

Sie haben vielleicht bemerkt, dass sich keines der Attribute in der Prozessliste geändert hat. Wie ist das möglich, wenn man bedenkt, dass sich Prozesse von Threads unterscheiden? Im Linux-Kernel werden Threads und Prozesse mit denselben Datenstrukturen behandelt. So hat jeder Thread seine eigene ID, seinen eigenen Status und so weiter.

Wenn Sie zurück zur Prozessansicht wechseln wollen, drücken Sie erneut ‚H‘. Zusätzlich können Sie den -H Schalter verwenden, um Threads standardmäßig anzuzeigen.

top -H

Vollständige Pfade anzeigen

Standardmäßig zeigt top nicht den vollständigen Pfad zum Programm an oder unterscheidet zwischen Kernelspace-Prozessen und Userspace-Prozessen. Wenn Sie diese Informationen benötigen, drücken Sie ‚c‘, während top läuft. Drücken Sie erneut ‚c‘, um zur Standardeinstellung zurückzukehren.

Kernelspace-Prozesse sind mit eckigen Klammern um sie herum markiert. Im obigen Screenshot gibt es zum Beispiel zwei Kernelprozesse, kthreadd und khelper. Auf den meisten Linux-Installationen gibt es in der Regel noch ein paar mehr davon.

Alternativ können Sie auch mit dem Argument -c oben starten:

top -c

Forest-Ansicht

Manchmal möchten Sie vielleicht die Kind-Eltern-Hierarchie der Prozesse sehen. Das können Sie mit der Waldansicht sehen, indem Sie ‚v’/’V‘ drücken, während top läuft.

Wie Sie dem obigen Screenshot entnehmen können, war der systemd Prozess der erste, der auf dem System gestartet wurde. Er hat Prozesse wie sshd gestartet, die wiederum andere sshd Prozesse erzeugt haben, und so weiter.

Prozesse eines Benutzers auflisten

Um Prozesse eines bestimmten Benutzers aufzulisten, drücken Sie ‚u‘, wenn top läuft. Geben Sie dann den Benutzernamen ein, oder lassen Sie ihn leer, um die Prozesse aller Benutzer anzuzeigen.

Alternativ können Sie den Befehl top mit dem -u-Schalter ausführen. In diesem Beispiel haben wir alle Prozesse des Root-Benutzers aufgelistet.

top -u root

Filtern nach Prozessen

Wenn Sie mit vielen Prozessen arbeiten müssen, wird eine einfache Sortierung nicht ausreichen. In einer solchen Situation können Sie die Filterung von top verwenden, um sich auf einige wenige Prozesse zu konzentrieren. Um diesen Modus zu aktivieren, drücken Sie ‚o’/’O‘. Es erscheint eine Eingabeaufforderung in top, und Sie können hier einen Filterausdruck eingeben.

Ein Filterausdruck ist eine Anweisung, die eine Beziehung zwischen einem Attribut und einem Wert angibt. Einige Beispiele für Filter sind:

  • COMMAND=getty: Filtert Prozesse, die „getty“ im COMMAND-Attribut enthalten.
  • !COMMAND=getty: Prozesse filtern, die „getty“ nicht im COMMAND-Attribut haben.
  • %CPU>3.0: Prozesse filtern, die eine CPU-Auslastung von mehr als 3 % haben.

Wenn Sie einen Filter hinzugefügt haben, können Sie die Dinge weiter eingrenzen, indem Sie weitere Filter hinzufügen. Um alle von Ihnen hinzugefügten Filter zu löschen, drücken Sie ‚=‘.

Ändern des Standardaussehens der CPU- und Speicher-Statistik

Wenn Sie hauptsächlich in einer GUI-Umgebung zu Hause sind, gefällt Ihnen vielleicht die Standarddarstellung der CPU- und Speicher-Statistiken von Top nicht. Sie können ‚t‘ und ‚m‘ drücken, um den Stil der CPU- und Speicher-Statistiken zu ändern. Hier ist ein Screenshot von top, wo wir ‚t‘ und ‚m‘ einmal gedrückt haben.

Wenn Sie ‚t‘ oder ‚m‘ wiederholt drücken, wechselt es durch vier verschiedene Ansichten. Bei den ersten beiden Betätigungen werden zwei verschiedene Arten von Fortschrittsbalken durchlaufen. Wenn Sie die Taste ein drittes Mal drücken, wird der Fortschrittsbalken ausgeblendet. Wenn Sie die Taste noch einmal drücken, bringt es die standardmäßigen, textbasierten Zähler zurück.

Speichern Ihrer Einstellungen

Wenn Sie Änderungen an der Ausgabe von top vorgenommen haben, können Sie diese für eine spätere Verwendung speichern, indem Sie ‚W‘ drücken. top schreibt seine Konfiguration in die Datei .toprc in Ihrem Home-Verzeichnis.

Abschluss

Der Befehl top ist äußerst hilfreich für die Überwachung und Verwaltung von Prozessen auf einem Linux-System. Dieser Artikel kratzt nur an der Oberfläche, und es gibt eine ganze Menge, das wir nicht behandelt haben. Zum Beispiel gibt es eine Menge weiterer Spalten, die Sie zu top hinzufügen können. Für all diese Dinge sollten Sie sich die Manpage ansehen, indem Sie man top auf Ihrem System ausführen.

Wenn Ihnen dieser Beitrag gefallen hat, teilen Sie ihn bitte 🙂

Schreibe einen Kommentar

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