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.
| Befehl | Angezeigte Prozesse | Ausgabeformat | Typischer Einsatzzweck |
|---|---|---|---|
ps | Prozesse des aktuellen Terminal-Kontexts | Knapp | Schnelle Kontrolle der aktuellen Shell |
ps -A | Alle Prozesse des Systems | Knapp | Vollständige Prozessmenge ermitteln |
ps -e | Alle Prozesse des Systems | Knapp | Alternative zu ps -A |
ps aux | Praktisch alle Prozesse, einschließlich terminalloser Prozesse | Benutzerorientiert und ausführlich | Ressourcen 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.
| Option | Wirkung | Hinweis |
|---|---|---|
a | Bezieht Prozesse mit einem Terminal für weitere Benutzer ein. | Erweitert die Auswahl über die eigene Sitzung hinaus. |
u | Verwendet ein benutzerorientiertes, ausführlicheres Format. | Zeigt unter anderem Besitzer sowie CPU- und Speicherwerte. |
x | Bezieht auch Prozesse ohne steuerndes Terminal ein. | Wichtig für viele Dienste und Hintergrundprozesse. |
aux | Kombiniert 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
| Spalte | Bedeutung | Nutzen bei der Diagnose |
|---|---|---|
USER | Benutzerkonto, dem der Prozess gehört. | Hilft bei der Zuordnung und bei der Beurteilung von Berechtigungen. |
PID | Numerische Prozess-ID. | Eindeutige Identifikation des aktuell laufenden Prozesses. |
%CPU | Von ps berechneter CPU-Nutzungswert. | Hinweis auf mögliche CPU-Verursacher; der Wert ist eine Momentaufnahme beziehungsweise ein berechneter Wert. |
%MEM | Anteil des Arbeitsspeichers, den der Prozess nutzt. | Hilft beim Auffinden speicherintensiver Prozesse. |
VSZ | Größe des virtuellen Adressraums, üblicherweise in KiB. | Zeigt reservierten oder abgebildeten virtuellen Speicher, nicht ausschließlich belegten RAM. |
RSS | Resident Set Size: physisch im RAM befindlicher Speicheranteil, üblicherweise in KiB. | Besserer direkter Hinweis auf die aktuelle RAM-Belegung als VSZ. |
TTY | Steuerndes Terminal des Prozesses. | Ein ? kennzeichnet häufig einen Prozess ohne steuerndes Terminal, etwa einen Dienst. |
STAT | Kompakter Prozessstatus. | Hilft bei der Diagnose von laufenden, schlafenden oder wartenden Prozessen. |
START | Zeitpunkt oder Datum des Prozessstarts. | Zeigt, ob ein Prozess gerade oder schon lange läuft. |
TIME | Kumulierte CPU-Zeit seit dem Start. | Nicht mit der verstrichenen Laufzeit oder dem aktuellen %CPU-Wert verwechseln. |
COMMAND | Dargestellter 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
| Symptom | Ursache | Lö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
- Prüfe die PID unmittelbar vor einer weiteren Maßnahme erneut, weil Prozesse enden und PIDs wiederverwendet werden können.
- Vergleiche Benutzerkonto, vollständigen Befehl, Startzeit und Status. Eine PID allein ist keine ausreichende Begründung für eine Aktion.
- Beende System- und Dienstprozesse nicht unüberlegt. Das kann Abhängigkeiten stören, Datenverlust verursachen oder den Systembetrieb beeinträchtigen.
- 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 zups -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.