Di, 14. Juli, 2020

Bash: Ausführungszeit eines Kommandos in Millisekunden messen

Wenn man im Monitoring einen Check schreiben will, der die Antwort-Zeit einer Aktion oder Response eines Servers messen will, sind sekundengenaue Angaben zu grob. Mit dem Kommando

time [Kommando]

kann man sehen, wie lange das jeweilige Kommando brauchte:

$ time ls
[… Liste von Dateien …]
real    0m0,022s
user    0m0,000s
sys     0m0,015s

Die Gesamtzeit ist in der Zeile real enthalten. Angegeben sind die Minuten, ein “m” und danach die Sekunden mit 3 Nachkommastellen. Wobei die Tausendstel je nach System/ Sprache mit Punkt oder Komma getrennt sein könnten.

Aha, nun muss man “nur” noch die Zeile mit der Angabe “real” in den letzten 3 Zeilen der gesamten Ausgabe suchen und das Ganze parsen.

Als kleines Demo anbei einmal mundgerecht als Funktion (es läuft unter Linux und mit CYGWIN unter MS Windows):

#!/usr/bin/env bash
# —— FUNCTION
# measure time in ms
# @param  string  command to execute / measure
function getExecTime(){
    local sCommand=$1
    local tmpfile=$( mktemp )
    
    ( time eval $sCommand ) >$tmpfile 2>&1
    local sRealtime=`cat $tmpfile | tail -3 | grep ”^real” | awk ’{ print $2 }’`
    rm -f $tmpfile
    
    local iMin=`echo $sRealtime | cut -f 1 -d ”m” `
    local iMillisec=`echo $sRealtime | cut -f 2 -d ”m” | sed ”s#[.,s]##g” | sed ”s#^0*##g” `
    typeset -i local iTime=$iMin*60000+$iMillisec
    echo $iTime
}
# —— MAIN
echo
echo ”ZEITMESSUNG IN MILLISEKUNDEN”
echo
mytime=`getExecTime ’ls -ltr’`
echo Dauer: ${mytime} ms

RSS | ATOM


Kommentar hinzufügen

Die Felder Name und Kommentar sind Pflichtfelder.


BBCode Hilfe

 

Abonnieren