Ausführungsdauer von Skripten zuverlässig messen

Je nach Skript-Konzipierung kann die Dauer ihrer Ausführung stark variieren. Hilfreich kann da eine Performance-Messung sein, die deren verstrichene Ausführungszeit erfasst. Wie dies umgesetzt wird, schauen wir uns anhand zweier Beispiele mal genauer an.

time

Die erste Möglichkeit, die benötigte Ausführungsdauer des Skripts zu erfassen, ist mit Hilfe des Tools time. Hierbei wird lediglich das entsprechende Kommando dem Skript vorangestellt:

time ./skript.sh

Neben der üblichen Ausgabe des Skripts (falls überhaupt vorhanden) erhalten wir am Ende noch eine Übersicht in unser Terminal-Fenster gedruckt die in etwas so aussieht:

Diese 3 Zeilen geben uns die folgende Auskunft:

realDie echte Zeit, die vom Start bis zum Ende vergangen ist (eine Stoppuhr sozusagen). Dabei mit einberechnet sind ebenso künstliche Wartezeiten wie z.B. das sleep Kommando.
userZeit, die der Prozessor im Benutzermodus (User Space) benötigt. Das ist quasi die reale Rechenzeit.
sysIn dieser Zeit arbeitet der Prozessor im Kernelmodus (System Space) und bearbeitet Systemfunktionen, wie Dateien lesen/schreiben, Netzwerke benutzen, Speicher zuweisen, etc. …

In meinem Skript beispielsweise habe ich mit dem Kommando sleep gearbeitet, weswegen eine relativ hohe Diskrepanz zwischen real vergangener Durchführung und der Bearbeitungsdauer jeweils im User- und System Space entstanden ist.

Innerhalb des Skripts mit Zeitstempeln

Auch ist es natürlich möglich, innerhalb des Skripts selbst eine Zeitmessung durchzuführen. Das könnte in etwa so aussehen:

#!/bin/bash
start=$(date +%s)

sleep 3

end=$(date +%s)
duration=$((end - start))

# Umrechnung
stunden=$((duration / 3600))
minuten=$(((duration % 3600) / 60))
sekunden=$((duration % 60))

echo "Gesamtdauer: $duration Sekunden"
echo "Das sind insgesamt: ${stunden}h ${minuten}m ${sekunden}s"

In Zeile 3 wird zunächst der Startzeitpunkt festgelegt und es folgt der eigentliche Codeblock. Am Ende dieses Codeblocks wird in einer weiteren Variable der Endzeitpunkt gespeichert und die Differenz zur weiteren Umrechnung zwischengespeichert. Diese Umrechnung findet dann auch in Zeile 13 – 15 statt. Zum Schluss kann das Ergebnis beliebig in der Kommandozeile ausgegeben und/oder in einer Log-Datei zwischengespeichert werden.
Diese Art der Zeiterfassung ist zwar wesentlich komplexer als das erste Beispiel, lässt sich jedoch auch variabler gestalten und bei Bedarf auch in einer Log-Datei erfassen.

Fazit

Wer einen Überblick über die Skript-Performance behalten möchte oder einfach nur neugierig ist, wie viel Zeit die Ausführung in Anspruch nimmt, kann dies leicht und effizient lösen. Ob schnell und einfach mit dem Tool time oder etwas komplexer, dafür aber auch variabler mit ein paar zusätzlichen Anpassungen innerhalb des Skripts, ist da jedem selbst überlassen.

Bildquellen:
Terminal-Bild von OpenClipart-Vectors auf Pixabay
Stoppuhr-Bild von VideoPlasty.com auf Pixabay

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Nach oben scrollen