Ich habe mehrere Programme, die ich in einem Shell-Skript ausführe:
./myprogram1
./myprogram2
...
Ich weiß, dass ich jedes einzelne Programm durch Bearbeiten des Quellcodes profilieren kann, aber ich wollte wissen, ob es eine Möglichkeit gibt, die Gesamtzeit zu messen, die durch Profilierung des Skripts selbst ausgeführt wird. Gibt es ein Timer-Programm, das ich für diesen Zweck verwenden kann? Wenn ja, wie genau ist die Messung?
shell-script
time
profiling
Paul
quelle
quelle
Antworten:
Verwenden Sie zunächst die Zeit gemäß Jon Lins Vorschlag:
Sie sagen nicht, auf welchem Unix Ihre Skripte ausgeführt werden, sondern verwenden Linux, Truss unter Solaris / AIX, und ich denke, mit Tusc unter HP-UX können Sie viel darüber lernen, was ein Prozess tut. Ich mag die Option -c von strace, um eine schöne Zusammenfassung zu erhalten:
Beachten Sie auch, dass das Anhängen dieser Programme vom Typ Ablaufverfolgung das Programm etwas verlangsamen kann.
quelle
Überprüfen Sie den
time
Befehl . Sie können es verwenden, um die Ausführungszeit zusammen mit einigen anderen nützlichen Informationen zu messen, z. B. wo die Zeit verbracht wird.quelle
Es ist nicht gerade eine Profilerstellung, aber Sie können Ihr Skript während der Ausführung verfolgen. Setzen Sie
set -xv
vor dem Abschnitt, den Sie verfolgen möchten, undset +xv
nach dem Abschnitt.set -x
aktiviert xtrace, das jede ausgeführte Zeile anzeigt.set -v
Aktiviert den ausführlichen Modus, in dem auch Zeilen angezeigt werden, die möglicherweise Auswirkungen haben, aber nicht ausgeführt werden, z. B. die Variablenzuweisung.Sie können Ihre Ablaufverfolgung auch mit einem Zeitstempel versehen. Sie benötigen einen Terminalemulator, der jede Zeile mit einem Zeitstempel versehen kann. Das einzige, das ich kenne, ist RealTerm , ein Windows-Programm, das jedoch mit Wine funktioniert. Möglicherweise können Sie es auch verwenden
grabserial
, obwohl ich es nur mit echten seriellen Schnittstellen ausprobiert habe. Sie können herausfinden, welches serielle Gerät Ihre Shell verwendet, indem Sie es ausführenps -p $$
(wenn dies nicht der Fall istman
, erfahren Sie, wie Sie die TTY-Spalte in Ihreps
Ausgabe aufnehmen können).Auch hierzu finden Sie Performance - Profiling - Tools für Shell - Skripte auf Stack - Überlauf.
quelle
time
für mehrere IterationenProfilerstellung durch mehrmaliges Ausführen desselben Befehls
Wobei
echo "scale=1000; 4*a(1)" | bc -l
pi berechnet undtime (...)
sichergestellt wird, dass diefor
Schleife als einzelner Befehl ausgeführt wird.quelle
Da ich jetzt mindestens zweimal hier gelandet bin, habe ich eine Lösung implementiert:
https://github.com/walles/shellprof
Es führt Ihr Skript aus, taktet transparent alle gedruckten Zeilen und druckt am Ende eine Top-10-Liste der Zeilen, die am längsten auf dem Bildschirm angezeigt wurden:
quelle