VMware ESXi and vSphere Cluster Management

Linux-Prozesse mit ps auflisten und auswerten

Lerne, Linux-Prozesse mit ps, ps -A und ps aux aufzulisten, wichtige Spalten zu verstehen und CPU- sowie Speicherprobleme zu untersuchen.

Der Befehl ps zeigt laufende Linux-Prozesse und wichtige Informationen zu ihnen an. Diese Übersicht hilft bei der Diagnose langsamer Systeme, bei der Suche nach unerwarteten Programmen und bei der Fehlersuche in Diensten.

Was ist ein Prozess?

Ein Prozess ist eine aktuell ausgeführte Instanz eines Programms. Startest du beispielsweise einen Editor, einen Webserver oder ein Shell-Skript, erzeugt Linux dafür mindestens einen Prozess.

Ein Prozess besitzt unter anderem eine numerische PID (Process ID), ein Besitzerkonto, einen gestarteten Befehl und Informationen zum Ressourcenverbrauch. Die PPID ist die ID des Elternprozesses. Mit ihr lassen sich Prozesshierarchien nachvollziehen, etwa welcher Dienst einen weiteren Prozess gestartet hat.

Was macht ps?

ps steht für process status. Das Kommando erstellt eine Momentaufnahme der Prozesse zum Zeitpunkt des Aufrufs. Es aktualisiert die Anzeige nicht fortlaufend.

Die allgemeine Form lautet:

ps [Optionen]

Für eine einmalige Prüfung ist ps sehr geeignet. Wenn du die Auslastung dagegen fortlaufend beobachten möchtest, ist top das passendere Werkzeug. Dort wird die Prozessliste regelmäßig aktualisiert.

ps ohne Optionen

Ohne Optionen zeigt ps normalerweise nur Prozesse im Kontext des aktuellen Terminals beziehungsweise der aktuellen Shell-Sitzung an:

ps

Die typische Ausgabe enthält meist diese knappen Spalten:

  PID TTY          TIME CMD
 4821 pts/0    00:00:00 bash
 5173 pts/0    00:00:00 ps
  • PID: Prozess-ID.
  • TTY: zugeordnetes Terminal.
  • TIME: bisher kumulierte CPU-Zeit.
  • CMD: dargestellter Befehl oder Prozessname.

Diese Ansicht ist für eine schnelle Kontrolle der aktuellen Shell nützlich, genügt aber nicht für einen vollständigen Systemüberblick. Andere Benutzer, Hintergrunddienste und Prozesse ohne Terminal fehlen typischerweise.

Alle Prozesse mit ps -A anzeigen

Mit -A listest du sämtliche Prozesse des Systems auf:

ps -A

ps -e ist eine verbreitete, gleichwertige Schreibweise:

ps -e

Damit werden Prozesse unabhängig vom Benutzer und vom Terminal einbezogen. Die Standardspalten bleiben jedoch eher knapp. Für Diagnosezwecke ist deshalb häufig ein ausführlicheres Format hilfreicher.

BefehlAngezeigte ProzesseAusgabeformatTypischer Einsatzzweck
psProzesse des aktuellen Terminal-KontextsKnappSchnelle Kontrolle der aktuellen Shell
ps -AAlle Prozesse des SystemsKnappVollständige Prozessmenge ermitteln
ps -eAlle Prozesse des SystemsKnappAlternative zu ps -A
ps auxPraktisch alle Prozesse, einschließlich terminalloser ProzesseBenutzerorientiert und ausführlichRessourcen prüfen und Prozesse diagnostizieren

BSD-Optionen a, u und x

Linux unterstützt mehrere Optionsstile. Bei Unix-artigen Optionen steht meist ein Bindestrich, etwa bei ps -A. BSD-Optionen werden häufig ohne vorangestellten Bindestrich geschrieben, etwa bei ps aux. Die Schreibweise beeinflusst sowohl die Auswahl der Prozesse als auch das Ausgabeformat.

OptionWirkungHinweis
aBezieht Prozesse mit einem Terminal für weitere Benutzer ein.Erweitert die Auswahl über die eigene Sitzung hinaus.
uVerwendet ein benutzerorientiertes, ausführlicheres Format.Zeigt unter anderem Besitzer sowie CPU- und Speicherwerte.
xBezieht auch Prozesse ohne steuerndes Terminal ein.Wichtig für viele Dienste und Hintergrundprozesse.
auxKombiniert a, u und x.Typische Übersicht über praktisch alle laufenden Prozesse.

Die Kombination wird ohne Bindestrich geschrieben:

ps aux

Verwende Optionsstile bewusst. Ein Bindestrich kann bei ps eine andere Syntax und damit eine andere Semantik oder ein anderes Format bedeuten.

Die Ausgabe von ps aux lesen

Eine typische Ausgabe von ps aux beginnt ungefähr so:

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.1 168000 12000 ?        Ss   Aug17   0:04 /sbin/init
alex      4821  2.3  1.4 512000 98000 pts/0    Sl+  10:12   0:18 editor
SpalteBedeutungNutzen bei der Diagnose
USERBenutzerkonto, dem der Prozess gehört.Hilft bei der Zuordnung und bei der Beurteilung von Berechtigungen.
PIDNumerische Prozess-ID.Eindeutige Identifikation des aktuell laufenden Prozesses.
%CPUVon ps berechneter CPU-Nutzungswert.Hinweis auf mögliche CPU-Verursacher; der Wert ist eine Momentaufnahme beziehungsweise ein berechneter Wert.
%MEMAnteil des Arbeitsspeichers, den der Prozess nutzt.Hilft beim Auffinden speicherintensiver Prozesse.
VSZGröße des virtuellen Adressraums, üblicherweise in KiB.Zeigt reservierten oder abgebildeten virtuellen Speicher, nicht ausschließlich belegten RAM.
RSSResident Set Size: physisch im RAM befindlicher Speicheranteil, üblicherweise in KiB.Besserer direkter Hinweis auf die aktuelle RAM-Belegung als VSZ.
TTYSteuerndes Terminal des Prozesses.Ein ? kennzeichnet häufig einen Prozess ohne steuerndes Terminal, etwa einen Dienst.
STATKompakter Prozessstatus.Hilft bei der Diagnose von laufenden, schlafenden oder wartenden Prozessen.
STARTZeitpunkt oder Datum des Prozessstarts.Zeigt, ob ein Prozess gerade oder schon lange läuft.
TIMEKumulierte CPU-Zeit seit dem Start.Nicht mit der verstrichenen Laufzeit oder dem aktuellen %CPU-Wert verwechseln.
COMMANDDargestellter ausführbarer Befehl, Prozessname oder Befehlszeile.Wichtig, um mehrere ähnliche Prozesse zu unterscheiden.

VSZ und RSS unterscheiden

VSZ beschreibt den virtuellen Adressraum. Dazu können beispielsweise gemeinsam genutzte Bibliotheken, reservierte Bereiche oder ausgelagerte Speicherbereiche gehören. Ein hoher VSZ-Wert bedeutet daher nicht automatisch, dass ebenso viel physischer RAM belegt ist.

RSS beschreibt den Anteil, der tatsächlich im RAM resident ist. Für die Beurteilung eines akuten Speicherproblems solltest du RSS und %MEM gemeinsam betrachten und die Werte im Kontext des Programms bewerten.

STAT als Diagnosehinweis

Der erste Buchstabe von STAT beschreibt den Grundzustand. Häufige Beispiele sind R für ausführbar oder laufend, S für unterbrechbar schlafend und D für nicht unterbrechbar wartend, oft während einer Ein-/Ausgabeoperation. Zusätzliche Zeichen können beispielsweise eine Vordergrundprozessgruppe oder weitere Eigenschaften kennzeichnen. Der Status ist ein Hinweis, aber allein noch keine Fehlerdiagnose.

Prozesse für die Fehlersuche identifizieren

Bei einem langsamen System prüfst du zunächst CPU- und Speicherwerte. Nach CPU-Verbrauch sortierst du die Ausgabe absteigend:

ps aux --sort=-%cpu

Nach Speicherverbrauch geht es entsprechend mit:

ps aux --sort=-%mem

Untersuche bei einem auffälligen Eintrag mindestens den Prozessnamen, die PID, das Benutzerkonto und den vollständigen Startbefehl. Prüfe außerdem, ob der Prozess zu einem erwarteten Dienst gehört und ob sein hoher Verbrauch dauerhaft oder nur kurzzeitig auftritt.

Nach einem Prozessnamen filtern

Mit einer Pipeline kannst du die Ausgabe eingrenzen:

ps aux | grep '[n]ginx'

Das Muster [n]ginx verhindert, dass der eigene grep-Prozess als Treffer erscheint. Bei einem einfachen Muster wie grep nginx würde die laufende Suchzeile selbst ebenfalls den Text nginx enthalten.

Beachte, dass eine einzelne ps-Ausgabe nur eine Momentaufnahme ist. Ein Prozess kann zwischen zwei Aufrufen beendet werden, seine Last kann bereits wieder gesunken sein oder erst später auftreten.

Typische Probleme und Lösungen

SymptomUrsacheLösung
ps zeigt deutlich weniger Prozesse als erwartet.Die Standardansicht beschränkt sich auf den aktuellen Terminal-Kontext.ps -A für alle Prozesse oder ps aux für eine ausführliche Gesamtansicht verwenden.
Ein Dienst erscheint nicht bei ps a.Viele Dienste besitzen kein steuerndes Terminal.Die Option x einbeziehen, beispielsweise mit ps aux.
Aus einer Ausgabe ist keine eindeutige Ursache für die Langsamkeit erkennbar.ps liefert nur einen Zeitpunktwert.Werte als Hinweis verwenden und für fortlaufende Beobachtung top einsetzen.
grep erscheint selbst als Treffer.grep läuft während der Pipeline ebenfalls als Prozess.Ein Zeichen des Suchmusters in eckige Klammern setzen, etwa [n]ginx.
Ein hoher VSZ-Wert wird vorschnell als Speicherproblem bewertet.VSZ beschreibt virtuellen Adressraum und nicht ausschließlich belegten RAM.Zusätzlich RSS und %MEM prüfen.

Sicherer Umgang mit den Ergebnissen

  1. Prüfe die PID unmittelbar vor einer weiteren Maßnahme erneut, weil Prozesse enden und PIDs wiederverwendet werden können.
  2. Vergleiche Benutzerkonto, vollständigen Befehl, Startzeit und Status. Eine PID allein ist keine ausreichende Begründung für eine Aktion.
  3. Beende System- und Dienstprozesse nicht unüberlegt. Das kann Abhängigkeiten stören, Datenverlust verursachen oder den Systembetrieb beeinträchtigen.
  4. Nutze top, wenn du erst beobachten möchtest, ob eine hohe CPU- oder Speichernutzung dauerhaft besteht.

Wichtige Befehle zum Nachschlagen

  • ps – Prozesse der aktuellen Terminal-Sitzung anzeigen.
  • ps -A – alle Prozesse des Systems auflisten.
  • ps -e – verbreitete Alternative zu ps -A.
  • ps aux – ausführliche Übersicht mit Besitzern sowie CPU-, Speicher- und Befehlsinformationen.
  • ps aux --sort=-%cpu – nach CPU-Nutzung absteigend sortieren.
  • ps aux --sort=-%mem – nach Speicherverbrauch absteigend sortieren.