Linux time-Befehl: Befehlszeitmessung

LinuxLinuxBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Lab werden Sie den time-Befehl in Linux erkunden, ein leistungsstarkes Werkzeug zur Messung der Ausführungszeit von Befehlen und Programmen. Als junger Softwareentwickler bei TechInnovate wurden Sie mit der Optimierung einer Reihe von Datenverarbeitungsskripten betraut. Ihr Teamleiter hat vorgeschlagen, den time-Befehl zu verwenden, um Leistungsschwachstellen zu identifizieren. Durch diese praktische Erfahrung werden Sie lernen, wie Sie time nutzen können, um die Effizienz Ihres Codes zu bewerten und zu verbessern.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/SystemInformationandMonitoringGroup(["System Information and Monitoring"]) linux/SystemInformationandMonitoringGroup -.-> linux/time("Command Timing") subgraph Lab Skills linux/time -.-> lab-219197{{"Linux time-Befehl: Befehlszeitmessung"}} end

Zeitmessung von Dateioperationen

Der time-Befehl ist ein vielseitiges Werkzeug, das Einblicke in die Ressourcen gibt, die während der Ausführung eines Befehls verbraucht werden. Beginnen wir mit der Zeitmessung einiger einfacher Dateioperationen.

Zunächst erstellen wir eine Datei mit etwas Inhalt:

echo "This is a test file for TechInnovate's performance analysis." > test_file.txt

Dieser Befehl erstellt eine neue Datei namens test_file.txt im aktuellen Verzeichnis und schreibt den angegebenen Text hinein. Das >-Symbol wird verwendet, um die Ausgabe von echo in die Datei umzuleiten.

Nun messen wir die Zeit für das Lesen dieser Datei:

time cat test_file.txt

Sie sollten den Inhalt der Datei sehen, gefolgt von Zeitmessungsinformationen. Die Ausgabe könnte in etwa so aussehen:

This is a test file for TechInnovate's performance analysis.
cat test_file.txt  0.00s user 0.00s system 85% cpu 0.003 total

Hier ist, was diese Messwerte bedeuten:

  • 0.00s user: Die Menge an CPU-Zeit, die im Benutzer-Modus (außerhalb des Kernels) innerhalb des Prozesses verbracht wurde.
  • 0.00s system: Die Menge an CPU-Zeit, die im Kernel innerhalb des Prozesses verbracht wurde.
  • 85% cpu: Der Prozentsatz der CPU-Auslastung.
  • 0.003 total: Die gesamte verstrichene Zeit von dem Moment, als Sie die Eingabetaste gedrückt haben, bis der Befehl abgeschlossen ist.

Bei einer so einfachen Operation sind diese Zeiten sehr gering. Sie könnten bei jedem Ausführen des Befehls leichte Abweichungen bemerken, bedingt durch die Systemauslastung und andere Faktoren.

Zeitmessung komplexer Befehle

Ihr Teamleiter hat ein Skript bereitgestellt, das Log-Dateien verarbeitet. Lassen Sie uns die Ausführungszeit dieses Skripts messen, um eine Basis für die Optimierung zu erhalten.

Zunächst erstellen wir ein einfaches Verarbeitungsskript:

cat << EOF > process_logs.sh
#!/bin/zsh
for i in {1..1000}; do
    echo "Processing log entry $i" >> output.log
done
sort output.log > sorted_output.log
uniq -c sorted_output.log > final_output.log
rm output.log sorted_output.log
EOF

chmod +x process_logs.sh

Dieses Skript führt folgende Schritte aus:

  1. Erstellt eine Schleife, die 1000 Log-Einträge generiert.
  2. Sortiert diese Einträge.
  3. Zählt die eindeutigen Einträge.
  4. Entfernt die Zwischendateien.

Der Befehl chmod +x macht das Skript ausführbar.

Nun messen wir die Ausführungszeit dieses Skripts:

time./process_logs.sh

Die Ausgabe zeigt die Zeit an, die das gesamte Skript benötigt, um zu laufen. Sie könnte in etwa so aussehen:

./process_logs.sh  0.03s user 0.01s system 92% cpu 0.045 total

Diese Zahlen variieren je nach der Leistung Ihres Systems, aber sie bieten eine Basis für Optimierungsbemühungen. Beachten Sie, dass die Gesamtzeit höher ist als die Summe aus Benutzer- und Systemzeit. Dieser Unterschied deutet oft auf E/A-Operationen (I/O operations) hin, in diesem Fall auf Dateilese- und -schreiboperationen.

Verwendung von time mit verschiedenen Befehlen

Lassen Sie uns untersuchen, wie sich der time-Befehl bei verschiedenen Arten von Operationen verhält. Dies wird Ihnen helfen, die Ergebnisse für verschiedene Aufgaben besser zu interpretieren.

Zunächst messen wir die Zeit einer CPU-intensiven Operation:

time echo {1..10000} | wc -w

Dieser Befehl generiert eine Zahlenfolge und zählt diese. Er ist hauptsächlich CPU-beschränkt (CPU-bound).

Als Nächstes messen wir die Zeit einer E/A-intensiven (I/O-intensive) Operation:

time find / -name "*.txt" 2> /dev/null

Dieser Befehl sucht nach allen .txt-Dateien ab dem Root-Verzeichnis. Er ist hauptsächlich E/A-beschränkt (I/O-bound).

Schließlich messen wir die Zeit eines Befehls, der sowohl CPU- als auch E/A-Operationen umfasst:

time sort -R /etc/passwd | head -n 5

Dieser Befehl sortiert den Inhalt der /etc/passwd-Datei zufällig und zeigt die ersten 5 Zeilen an.

Vergleichen Sie die Ausgaben dieser Befehle. Sie werden feststellen, dass CPU-intensive Aufgaben tendenziell höhere Benutzerzeiten (user times) haben, während E/A-intensive Aufgaben oft höhere Gesamtzeiten im Vergleich zu Benutzer- und Systemzeiten aufweisen.

Zusammenfassung

In diesem Lab haben Sie den time-Befehl in Linux kennengelernt, ein wichtiges Werkzeug zur Messung und Optimierung der Befehlsausführung. Sie haben gelernt, wie Sie:

  1. Die Zeit von Dateioperationen messen, um deren Leistung zu bewerten.
  2. Die Ausführungszeit komplexer Skripte messen.
  3. Das Verhalten von time bei verschiedenen Arten von Operationen (CPU-intensiv, E/A-intensiv (I/O-intensive) und gemischt) vergleichen.

Diese Fähigkeiten werden von unschätzbarem Wert sein, wenn Sie weiterhin Skripte optimieren und die Leistung in Ihrer Rolle bei TechInnovate analysieren.

Denken Sie daran, wenn Sie Code optimieren:

  • Suchen Sie nach Operationen mit unerwartet langer Ausführungszeit.
  • Berücksichtigen Sie sowohl die CPU-Zeit (Benutzer + System) als auch die Gesamtzeit.
  • Bei E/A-beschränkten (I/O-bound) Operationen konzentrieren Sie sich auf die Verringerung der Differenz zwischen Gesamtzeit und CPU-Zeit.
  • Bei CPU-beschränkten (CPU-bound) Operationen konzentrieren Sie sich auf die Verringerung der Benutzerzeit.

Wenn Sie diese Techniken in Ihrer Arbeit anwenden, werden Sie sicherer darin werden, Leistungsschwachstellen in Ihrem Code zu identifizieren und zu beheben.