Dashboard by Shaun Darwood

Es gibt eine große Auswahl an Performance-Tools für Linux: htop, nmon, etc. Der Klassiker unter den Performance-Tools muss jedoch nicht nachinstalliert werden – auf den meisten Distributionen wird er per Basis-Installation mitgeliefert: top!

TL;DR

Der folgende Text ist eine Kurzanleitung für das Performance-Tool top. Genauer: es geht dabei ausschließlich um die Darstellung von Informationen mit Hilfe von Filtern, der sinnvollen Aufteilung der Daten und dem farblichen Hervorheben von relevanten Informationen. Ein Beispiel ist als Screenshot am Ende des Artikels zu finden.

Techniken bezüglich Performance-Analyse ist kein Thema dieses Artikels.

was ist top?

top ist ein Prozess-Viewer, läuft interaktiv und per Befehlszeile. Sein Fokus liegt dabei vor allem auf CPU- und Memory-Messungen, dem Filtern von Werten und der Darstellung von Prozessen und deren Manipulation. Im Gegensatz zu htop und nmon sieht er ohne Customizing farblos und unspektakulär aus:

Mit ein wenig Aufwand, wird aus top ein ansehnliches und modernes Werkzeug – genau wie in der Fabel “das hässliche Entlein”.

Weshalb top?

htop, nmon sind konfigurierbar, teilweise mächtiger als top und ebenfalls für die meisten Distributionen per nachträglicher Installation verfügbar. Die beiden hauptsächlichen Alleinstellungsmerkmale betreffen deshalb ausschließlich die Verfügbarkeit von top per Standardinstallation und die Portabilität der Konfiguration:

  • top ist per Default auf RHEL und Ubuntu und vermutlich auch auf den meisten anderen Distributionen vorinstalliert.
  • top ist konfigurierbar und die Optik anpassbar. Die Konfigurationsfiles sind zwischen den Distributionen austauschbar (getestet mit Ubuntu 18:04 und RHEL 8.3)

Erste Schritte

top wird auf der Kommandozeile einfach mit top aufgerufen:

$ top

In diesem Howto werde ich Schritt für Schritt top konfigurieren und das Ergebnis wird eine Konfigurationsdatei sein. Für weitergehende Informationen empfehle ich die sehr ausführliche man Page.

Sichern der Konfiguration und manueller Refresh

Mit W wird die Konfiguration in die Datei $HOME/.toprc bzw. $HOME/.config/procps/toprc geschrieben.

Mit Space wird manuell ein Refresh gemacht. Der Defaultwert ist 3 Sekunden.

Summary Area

Der oberste Abschnitt von top nennt sich “Summary Area”:

Die Summary Area stellt bereits eine Fülle an Informationen dar. Es gibt aber ein paar Informationen die ich hier anpasse:

  • %CPU(s): da mein System lediglich 2 Core hat, möchte ich hier keine Zusammenfassung der CPU Last, sondern die beiden Cores dargestellt sehen. Dazu drücke ich 1.
  • MiB Mem/MiB Swap: mit 12GB Memory bevorzuge ich eine Anzeige der Memory-Belegung in GB. Dazu drücke ich E.
  • ich möchte mir die Scrollkoordinaten in der Task Area anzeigen lassen und aktiviere dies mit dem Drücken von C.
  • der eingestellte Refreshintervall von 3 Sekunden ist mir zu lange, also drücke ich s und setze den Refreshintervall auf 0.75.

Ich speichere die Konfiguration mit W und mein angepasstes Summary wird nun beim nächsten Aufruf von top so aussehen:

Task Area

Anzeige von Prozessen

In der Task Area werden die Prozesse und deren Informationen dargestellt. In dieser Fläche werden die Prozesse gefiltert, sortiert, und unterschiedlich dargestellt (Listen vs. Baumansicht). Jede Spalte stellt eine eigene Metrik dar, welche ausgewählt werden kann. Eine Referenz mit den wichtigsten Keys ist am Ende des Artikels zu finden.

Alternative Display-Mode

Mit A kann ich in den A-mode springen:

Ich habe nun 4 Fenster, in denen ich Informationen nach meinen Bedürfnissen aufteilen kann. Ich entscheide mich, die Fenster nach folgenden Schwerpunkten zu gestalten:

  • 1: CPU und Zeit
  • 2: Memory und Swap
  • 3: User spezifisch
  • 4: Prozesse sortiert nach Status

Navigation und Umbenennung des ersten Fensters

Mit folgenden Keys kann im A-Mode navigiert werden:

  • g -> Nummer: gezielt in ein Fenster wechseln
  • w: durch die einzelnen Fenster blättern.

Mit g und 1 wird in das erste Fenster gewechselt. Ich kann dies kontrollieren, da im Summary Fenster nun der Fenstername “1:Def” erscheint. Mit G nenne ich das Fenster CPU:

Felder auswählen

Felder anpassen

Die aktuellen Felder in diesem Fenster passen nicht recht. Ich möchte dort alles über CPU und verbrauchte CPU Zeit sehen. Ich muss also die Felder und somit meine Metriken entsprechend anpassen. Dazu drücke ich f auf wechsle in das Feld Menü, welches mir folgende Felder zur Auswahl stellt:

Ich selektiere Felder von denen ich mir Informationen bezüglich CPU Verbrauch erhoffe und verschiebe diese so, dass mein Fenster nun folgende Felder als Spalten besitzt:

Mit q speichere ich die Einstellungen und verlasse den Feld Editor.

Informationen filtern und sortieren

Um die Informationen auf das Wesentliche zu beschränken, entschließe ich mich für die folgenden Filter und Sortierungen (wiederum nur für dieses Fenster):

  • da es um CPU geht, sortiere ich die Prozesse nach verbrauchter CPU
  • um nur noch relevante Daten zu sehen, blende ich 0-Werte aus
  • da ich genügend Raum in diesem Fenster habe, möchte ich den Pfad zu den laufenden Commands und die mitgegebenen Argumente sehen
  • ich möchte maximal 8 Prozesse sehen
  • ich möchte nur Prozesse sehen, die mehr als 5% CPU verbrauchen

Dies bewerkstellige ich mit der folgenden Tastenkombination:

P, 0, c
n -> 8
o -> %CPU>5,0

Beim Filtern nach Prozessen mit mehr als 5% CPU ist es wichtig, dass das Komma und ein Zehntel angegeben wird. Andernfalls funktioniert der Filter nicht.

Da lediglich 5 Prozesse mehr als 5% CPU Leistung fressen, werden aufgrund des Filters für %CPU statt 8 nur 5 Prozesse aufgelistet:

Ich habe nun eine Anzeige mit den für mich relevanten Daten. S steht für Status und der Status meiner yes-Prozesse sind auf R für Running.

Manuelles Sortieren per Pfeiltasten

Mit den Pfeiltasten links bzw. rechts ist auch ein manuelles Sortieren der vorhandenen Felder möglich. Ich möchte nun nach dem zweiten Feld TIME+ sortieren- Dazu bewege ich die Pfeiltaste nach rechts so lange, bis TIME+ ganz links ist, dies schaltet temporär den Filter für %CPU aus und listet mir die am längsten laufenden Prozesse auf:

Informationen farblich hervorheben

Nun sieht mein Fenster immer noch etwas blass aus. top bietet mir unterschiedliche Möglichkeiten um möglichst rasch relevante Informationen farblich hervorzuheben:

  • den einzelnen grafischen Elementen Farbtöne zuweisen
  • Highlighting: Hinter- und Vordergrund Highlighting
  • Highlighting von Spalten und Zeilen

Colormapping

Mit Z kann aus dem Hauptfenster in das Menü für Colormapping gewechselt werden. Im A-Mode werden die Farben per Default für das jeweils aktive Fenster geändert. Ich bin immer noch im Fenster CPU und wähle folgende Kombination:

  • Für Summary (S) wähle ich yellow (3), da ich auch gleich farblich im Summary sehen möchte, dass mein Fokus auf das Fenster CPU gelegt ist
  • Für Column Heads (H) und Task Information (T) wähle ich ebenfalls 3, um eine konsistente Farbgebung zu haben.
  • Für Messages/Prompts (M) wähle ich white (7) damit nicht alles gelb eingefärbt ist.
  • Mit Return speichere ich die Konfiguration und kehre zum Fenster CPU zurück.

Mein Fenster CPU sieht nun schon ganz nett aus:

Highlighting

Aber es geht noch etwas schöner. Mit Highlighting kann ich den Fokus auf das Wesentliche verstärken. Dazu muss ich aber erst den Filter auf %CPU>5,0 entfernen. Für ein einzelnes Fenster kann der Filter mit + entfernt werden.

  • x: Highlighting der Spalte nach der sortiert ist, wird eingeschaltet. In diesem Fall wird %CPU sortiert
  • b: Background Highlighting für Spalten wird eingeschaltet

Ich wende folgende Kombination an:

+, x, b

Das Auge wird nun auf die relevanten Informationen gelenkt:

Dieses Vorgehen kann nun auf alle Fenster angewendet werden.

Resultat

Das Resultat zeigt verschiedene Sichtweisen auf die Prozesse:

Prozesse manipulieren

Prozesse priorisieren

Mit top kann ich aber noch mehr als nur Informationen darstellen. Ich kann auch Prozesse priorisieren. Ich habe 5 yes-Prozesse am laufen. Nun möchte ich den Prozess mit der PID 5560 herabstufen. Dies bewerkstellige ich mit r und gebe dem Prozess den Nice-Wert 19:

Der Prozess ist von Prio 20 auf Prio 39 (bzw. 139) gesetzt worden, dh. er wurde in der Priorität nach hinten gestellt. Mit den Pfeiltasten kann ich ebenfalls Prozesse ansteuern, nachdem r gedrückt wird, ist die PID des obersten Prozesses im Fenster bereits voreingestellt und muss nur noch mit Return bestätigt werden. Ich passe 4 der 5 Prozesse an, danach beanspruchen die angepassten Prozesse weniger als 2% der Rechenzeit, während der unangepasste yes-Prozess 96% beansprucht:

Prozesse killen

Mit top können Prozesse auch gekillt werden. Dazu wird k gedrückt und per Default ist die PID des obersten Prozesses bereits ausgewählt. Da ich nach CPU Konsumation sortiert habe, ist der hungrigste Prozess ganz oben. Per Default wird ein SIGTERM abgesetzt (kill -15), es kann aber auch ein SIGKILL (kill -9) oder irgendein kill Signal abgesetzt werden.

Fazit

Falls Du es bis hier geschafft hast, Gratuliere! Mit top besitzt der Sysadmin ein solides Werkzeug um die Konsumation von CPU und Memory durch die Prozesse im Auge zu behalten. Mit etwas Anpassung kann man sich durchaus ein Dashboard bauen – der Aufwand hält sich mit etwas Übung meines Erachtens in Grenzen. Ich hoffe ich konnte Dir ein paar Ideen geben und vielleicht hast du noch weitere Ideen für Dashboards – ich würde mich über einen Kommentar auf LinkedIn freuen.

Kurzreferenz

Summary Area

  • l: oberste Zeile ein/aus: top Laufzeit in hh:mmm load average
  • 1 (Eins): Anzeige der Cores vs. Zusammenfassen der CPU Last
  • t: CPU Anzeige als numerische Werte (us, sy, ni, id, wa, hi, si, sd) oder als grafische Balken
  • E: wechseln zu verschiedene Memory Skalierungsfaktoren KiB, MiB, GiB, TiB, PiB, EiB
  • m: Memory Anzeige als numerische Werte (total/free/used) oder als grafische Balken
  • C: Anzeige der Scroll Koordinaten
  • B: Highlighting ein/aus
  • d, s: refresh Interval im Dezimalformat also “1”, “0.25”

Task Area

Sortieren

  • P: sortieren nach CPU Verbrauch
  • M: sortieren nach Memory Verbrauch
    • e: Darstellung verändern mit Skalierungsfaktoren KiB, MiB, GiB, TiB, PiB
  • T: sortieren der Prozesse nach Laufzeit
  • N: sortieren nach PID
  • R: Sortierung umkehren (reverse)

Filtern

  • u, U: Prozesse nach User filtern
  • i: idle Tasks werden ausgefiltert
  • 0: alle 0 Werte werden ausgeblendet
  • o: Filtern einer spezifischen Kolonne nach einem Wert, nicht case sensitiv
    • dasselbe wie o, aber case sensitiv
  • =: zurücksetzen aller Filter
    • +: zurücksetzen der Filter im aktiven Fenster (nur im A-Mode)

Darstellung anpassen

  • c: Commands werden nur mit Dateinamen dargestellt vs. Anzeige mit Pfad und Argumenten
  • V: Baumansicht vs. Liste

Schreibe einen Kommentar