• Allgemein
  • Der Linux-Befehl time: Messung von Ausführungszeit und Ressourcenverbrauch

Der Linux-Befehl time: Messung von Ausführungszeit und Ressourcenverbrauch

Was ist der Linux-Befehl time?

Zweck und Funktion

Der Befehl time ist ein unverzichtbares Werkzeug in der Linux-Shell, mit dem du die Ausführungszeit und den Ressourcenverbrauch von Befehlen messen kannst. Er bietet detaillierte Informationen zur Laufzeit, einschließlich Benutzer- und Systemzeit, Echtzeit und Speicherverbrauch.

Wie funktioniert er?

time führt den von dir angegebenen Befehl aus und protokolliert dabei die benötigte Zeit und die verbrauchten Ressourcen. Die Ausgabe wird in einem einheitlichen Format bereitgestellt, sodass du die Leistung verschiedener Befehle leicht vergleichen kannst.

Anwendungsfälle

Dieser vielseitige Befehl hat eine Vielzahl von Anwendungsfällen, darunter:

  • Fehlerbehebung: Identifiziere Befehle, die ungewöhnlich viel Zeit in Anspruch nehmen oder zu viele Ressourcen verbrauchen.
  • Leistungsoptimierung: Vergleiche die Leistung verschiedener Versionen eines Befehls, um Bereiche für Verbesserungen zu ermitteln.
  • Benchmarking: Vergleiche die Leistung verschiedener Systeme oder Konfigurationen.
  • Überwachung: Überwache die Leistung laufender Prozesse, um Engpässe oder Leistungsprobleme zu erkennen.

Verwendung des Befehls time

Mit dem Linux-Befehl time kannst du die Ausführungszeit und den Ressourcenverbrauch eines Befehls messen. Du kannst ihn verwenden, um die Leistung von Befehlen zu vergleichen, Engpässe zu identifizieren und die Ausführungsparameter zu optimieren.

Syntax

Die Syntax des Befehls time lautet wie folgt:

time [Optionen] Befehl [Argumente]

Optionen

Der Befehl time bietet zahlreiche Optionen, mit denen du die Datenausgabe steuern kannst. Hier sind einige nützliche Optionen:

  • -v, –verbose: Zeigt ausführliche Informationen über die Ausführungszeit an, einschließlich der verbrauchten CPU-Zeit, der verbrauchten Echtzeit und der Anzahl der unfreiwilligen Kontextwechsel.
  • -o, –output=FILE: Schreibt die Ausgabe in die angegebene Datei.
  • –format=FORMAT: Gibt die Ausgabe im angegebenen Format aus.
  • -a, –append: Fügt die Ausgabe einer vorhandenen Datei hinzu.

Wie du den Befehl time verwendest

Um den Befehl time zu verwenden, führe ihn einfach vor dem Befehl aus, den du messen möchtest. Beispielsweise kannst du die Ausführungszeit des Befehls ls wie folgt messen:

time ls

Die Ausgabe des Befehls time liefert dir Informationen über die Ausführungszeit, den Ressourcenverbrauch und andere relevante Metriken.

Messen der Ausführungszeit

Die Ausführungszeit eines Befehls ist die Zeit, die er für die Ausführung benötigt, einschließlich der Zeit, die für die Systemressourcenzuweisung, die Befehlsausführung und die Rückgabe der Kontrolle an die Shell aufgewendet wird. Du kannst die Ausführungszeit mithilfe der folgenden Metriken messen:

  • Echtzeit (elapsed): Die Gesamtzeit, die für die Ausführung des Befehls benötigt wird, einschließlich der Wartezeiten.
  • Benutzerzeit (user): Die Zeit, die der Befehl im Benutzermodus ausgeführt wird.
  • Systemzeit (sys): Die Zeit, die der Befehl im Kernelmodus ausgeführt wird.

Messung des Ressourcenverbrauchs

Der Befehl time kann auch den Ressourcenverbrauch eines Befehls messen, z. B. den Speicherverbrauch, die Anzahl der Seitenfehler und die Anzahl der unfreiwilligen Kontextwechsel. Diese Informationen können dir helfen, Engpässe zu identifizieren und die Ausführungsparameter zu optimieren.

Erkennen, wie lange ein Befehl läuft

Wenn du wissen möchtest, wie lange ein Befehl läuft, ist der Linux-Befehl time dein Freund. Mit time kannst du die Ausführungszeit eines beliebigen Befehls messen, indem du ihm den Befehl als Argument übergibst.

Einfache Zeiterfassung

Die einfachste Möglichkeit, die Ausführungszeit zu messen, ist die folgende:

time <befehl>

Beispiel:

time ls /

Diese Ausgabe zeigt die Ausführungszeit in realer Zeit, Benutzerzeit und Systemzeit an:

real    0m0.001s
user    0m0.000s
sys     0m0.000s

Interpretieren der Ausgabe

  • Reale Zeit: Die Gesamtzeit von der Befehlsausführung bis zum Abschluss, einschließlich Wartezeiten.
  • Benutzerzeit: Die Zeit, die der Befehl in deinem Nutzerkontext verbracht hat.
  • Systemzeit: Die Zeit, die der Befehl im Kernel-Kontext verbracht hat.

Wenn du nur an der reinen Ausführungszeit interessiert bist, summiere die Benutzer- und Systemzeit.

Messung des Ressourcenverbrauchs

Neben der Ausführungszeit ermöglicht dir der Befehl time auch die Messung des Ressourcenverbrauchs des ausgeführten Befehls. Dazu gehören:

CPU-Auslastung

Du kannst die gesamte vom Befehl genutzte CPU-Zeit mit der Option -v messen:

time -v [Befehl]

Die Ausgabe enthält mehrere Zeilen mit CPU-bezogenen Informationen, darunter:

  • User: Die von dem Befehl im Benutzermodus verbrachte CPU-Zeit
  • System: Die von dem Befehl im Systemmodus verbrachte CPU-Zeit
  • Elapsed: Die Gesamtzeit, die der Befehl benötigt hat

Speicherauslastung

Zum Messen der vom Befehl verbrauchten Speicherauslastung kannst du die Option -v zusammen mit der Option -l verwenden:

time -vl [Befehl]

Die Ausgabe enthält eine Zeile mit Speicherinformationen, darunter:

  • Maximum resident set size: Die maximale Menge an physischem Speicher, die vom Befehl belegt wurde
  • Average resident set size: Die durchschnittliche Menge an physischem Speicher, die vom Befehl belegt wurde

I/O-Statistik

Du kannst die vom Befehl ausgeführten I/O-Operationen mit der Option -v zusammen mit der Option -i messen:

time -vi [Befehl]

Die Ausgabe enthält mehrere Zeilen mit I/O-bezogenen Informationen, darunter:

  • Input: Die Anzahl der vom Befehl gelesenen Blöcke
  • Output: Die Anzahl der vom Befehl geschriebenen Blöcke

Anzeigen detaillierter Informationen über die Ausführungszeit

Über die grundlegenden Statistiken hinaus bietet dir der Befehl time die Möglichkeit, aufschlussreiche Details über die Ausführungszeit eines Befehls zu erhalten.

Benutzer- und Systemzeit

Neben der Gesamtlaufzeit liefert time Informationen zur Benutzerzeit und zur Systemzeit.

  • Benutzerzeit: Dies ist die Zeit, die ein Befehl im Benutzermodus verbracht hat, in dem er Anweisungen direkt für den Prozessor ausführt.
  • Systemzeit: Dies ist die Zeit, die ein Befehl im Systemmodus verbracht hat, in dem er auf Diensten oder Ressourcen des Kernels zugreift.

Du kannst diese Informationen verwenden, um zu verstehen, ob ein Befehl durch die direkte Ausführung oder durch den Zugriff auf Systemressourcen begrenzt ist.

Ein-/Ausgabewarteschlangen

time zeigt auch die Zeit an, die ein Befehl in Ein-/Ausgabewarteschlangen verbracht hat.

  • Ein-/Ausgabewarteschlange (E/A-Warteschlange): Dies ist die Zeit, die ein Befehl auf Daten von einer E/A-Quelle wie einer Festplatte oder einem Netzwerk gewartet hat.
  • Wartezeit auf Ein-/Ausgabe (Wartezeit für E/A): Dies ist die Zeit, die ein Befehl auf die Durchführung einer E/A-Operation gewartet hat, nachdem die Daten in der Warteschlange waren.

Diese Informationen können hilfreich sein, um Engpässe in deinem System zu identifizieren, die durch langsame E/A-Vorgänge verursacht werden.

Seitenfehler

time verfolgt auch die Anzahl der Seitenfehler, die während der Befehlsaufruf aufgetreten sind.

  • Seitenfehler: Dies ist ein Fehler, der auftritt, wenn ein Befehl auf einen Speicherbereich zugreift, der nicht im physischen Speicher vorhanden ist und deshalb von der Festplatte geladen werden muss.

Eine hohe Anzahl von Seitenfehlern kann auf einen unzureichenden Arbeitsspeicher oder auf einen ineffizienten Speicherzugriff durch den Befehl hindeuten.

Fehlersuche bei Befehlen mit dem Befehl time

Wenn du versuchst, die Ausführungszeit oder den Ressourcenverbrauch eines Befehls mit dem Befehl time zu messen, kannst du auf einige Fehler stoßen. Hier sind einige häufige Probleme und Möglichkeiten, sie zu beheben:

Der Befehl time wird nicht erkannt

  • Stelle sicher, dass du den Befehl time korrekt eingegeben hast.
  • Überprüfe, ob die time-Binärdatei auf deinem System installiert ist. Unter Ubuntu kannst du dies mit dem Befehl which time prüfen.
  • Installiere die time-Binärdatei, falls sie nicht installiert ist.

Der gemessene Befehl wird nicht korrekt ausgeführt

  • Überprüfe, ob du den zu messenden Befehl korrekt eingegeben hast.
  • Stelle sicher, dass der gemessene Befehl die erforderlichen Berechtigungen besitzt, um ausgeführt zu werden.
  • Überprüfe, ob der gemessene Befehl von deinem System unterstützt wird.

Die Ausgabe des Befehls time ist schwer verständlich

  • Verwende die Option -o FORMAT des Befehls time, um die Ausgabe im gewünschten Format zu formatieren.
  • Betrachte die Seite man time für weitere Informationen zur Ausgabeformatierung.

Der gemessene Befehl verbraucht unerwartet viele Ressourcen

  • Überprüfe, ob der gemessene Befehl für die Ausführung auf deinem System optimiert ist.
  • Betrachte die Verwendung des Befehls mit dem Befehl top oder htop, um mögliche Engpässe zu identifizieren.
  • Optimieren den gemessenen Befehl, um den Ressourcenverbrauch zu reduzieren.

Der Befehl time stürzt mit einer Fehlermeldung ab

  • Stelle sicher, dass du die neueste Version des Befehls time verwendest.
  • Melde den Fehler den Entwicklern der time-Binärdatei.
  • Verwende alternative Methoden, um die Ausführungszeit oder den Ressourcenverbrauch zu messen, z. B. die /usr/bin/time-Binärdatei oder das Skript /usr/lib/time.

Tipps und Best Practices für die Verwendung des Befehls time

Bei der Verwendung des Befehls time beachte folgende Tipps und Best Practices, um optimale Ergebnisse zu erzielen:

Nutze Optionen zur Steuerung der Ausgabe

Der Befehl time bietet verschiedene Optionen, mit denen du die Ausgabe anpassen kannst. So kannst du beispielsweise mit der Option -v detaillierte Informationen über den Ressourcenverbrauch anzeigen lassen. Verwende die Option -a, um eine Zusammenfassung der Ausführungszeiten und Ressourcenverbrauchsdaten zu erhalten.

Interpretiere die Ausgabe sorgfältig

Die Ausgabe des Befehls time kann komplex sein, insbesondere bei umfangreichen Befehlen. Nimm dir Zeit, die Ausgabe zu interpretieren und zu verstehen, welche Informationen bereitgestellt werden. Suche nach den Abschnitten "real", "user" und "sys", die die Ausführungszeit des Befehls angeben.

Verwende time als Wrapper-Befehl

Du kannst time als Wrapper-Befehl verwenden, um Befehle auszuführen und deren Ausführungszeit zu messen. Dies kann hilfreich sein, um die Leistung mehrerer Befehle zu vergleichen oder um lang laufende Aufgaben zu überwachen.

Verwende Profiling-Tools

Für detailliertere Einblicke in die Befehlslaufzeit kannst du Profiling-Tools wie Valgrind oder gprof verwenden. Diese Tools bieten zusätzliche Datenpunkte wie die Anzahl der Funktionsaufrufe, die Speicherzuteilung und den Cache-Trefferanteil.

Experimentiere mit verschiedenen Befehlen

Probiere verschiedene Befehle mit time aus, um zu verstehen, wie sie sich auf die Ausführungszeit auswirken. Dies kann dir helfen, Befehle zu optimieren und die Leistung deines Systems zu verbessern.

Beachte Einschränkungen

Der Befehl time hat einige Einschränkungen. So kann er beispielsweise die Ausführungszeit von Befehlen, die im Hintergrund ausgeführt werden, nicht messen. Berücksichtige diese Einschränkungen bei der Verwendung des Befehls.