1084 Stimmen

Wie messe ich gleichzeitig Anfrage- und Antwortzeiten mit cURL?

Ich habe einen Webdienst, der Daten im JSON-Format empfängt, die Daten verarbeitet und dann das Ergebnis an den Anfragenden zurückgibt.

Ich möchte die Anfrage-, Antwort- und Gesamtzeit mit cURL messen.

Meine Beispielanfrage sieht folgendermaßen aus:

curl -X POST -d @file server:port

und ich messe dies derzeit mit dem time-Befehl in Linux:

time curl -X POST -d @file server:port

Der Zeitbefehl misst jedoch nur die gesamte Zeit, was jedoch nicht ganz das ist, wonach ich suche.

Gibt es einen Weg, um die Anfrage- und Antwortzeiten mit cURL zu messen?

13voto

Ali Fensome Punkte 430

Allgemeine Lösung zur Messung der Ausführungszeit von Befehlen

Linux / Mac OS / Unix

Auf Linux kann die Zeit, die zur Ausführung eines Befehls benötigt wird, mit dem time Befehl gemessen werden

time curl https://en.wikipedia.org/wiki/Cat 

Output:

ect...

real    0m0.565s
user    0m0.011s
sys     0m0.024s

Hier ist die Gesamtzeit / Reaktionszeit die real Zeit.

Diese Lösung ist allgemein gültig und sollte mit jedem Unix-Befehl funktionieren

time sleep 5

Output:

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

Windows Powershell

Sie können Measure-Command verwenden

7voto

Lucas Punkte 313

Hier ist ein Bash-Code, um den gleichen Server wiederholt anzusprechen:

for i in {1..1000}; do curl -s -o /dev/null -w "%{time_total}\n" http://server/get_things; done

7voto

ATilara Punkte 471

Hier ist der String, den Sie mit -w verwenden können, der alle Optionen enthält, die curl -w unterstützt.

{"contentType":"%{content_type}","filenameEffective":"%{filename_effective}","ftpEntryPath":"%{ftp_entry_path}","httpCode":"%{http_code}","httpConnect":"%{http_connect}","httpVersion":"%{http_version}","localIp":"%{local_ip}","localPort":"%{local_port}","numConnects":"%{num_connects}","numRedirects":"%{num_redirects}","proxySslVerifyResult":"%{proxy_ssl_verify_result}","redirectUrl":"%{redirect_url}","remoteIp":"%{remote_ip}","remotePort":"%{remote_port}","scheme":"%{scheme}","size":{"download":"%{size_download}","header":"%{size_header}","request":"%{size_request}","upload":"%{size_upload}"},"speed":{"download":"%{speed_download}","upload":"%{speed_upload}"},"sslVerifyResult":"%{ssl_verify_result}","time":{"appconnect":"%{time_appconnect}","connect":"%{time_connect}","namelookup":"%{time_namelookup}","pretransfer":"%{time_pretransfer}","redirect":"%{time_redirect}","starttransfer":"%{time_starttransfer}","total":"%{time_total}"},"urlEffective":"%{url_effective}"}

gibt JSON aus.

6voto

Ich habe einen benutzerfreundlichen Formatter erstellt, um beim Debuggen von Curl-Anfragen zu helfen (siehe Kommentare zur Verwendung). Er enthält jeden bekannten Ausgabeparameter, den Sie in einem leicht lesbaren Format ausgeben können.

https://gist.github.com/manifestinteractive/ce8dec10dcb4725b8513

6voto

slm Punkte 13836

Dies ist eine modifizierte Version von Simons Antwort, die die mehrzeilige Ausgabe zu einer einzigen Zeile macht. Es führt auch den aktuellen Zeitstempel ein, damit es einfacher ist, jede Ausgabezeile zu verfolgen.

Beispiel Formatdatei

$ cat time-format.txt
time_namelookup:%{time_namelookup} time_connect:%{time_connect} time_appconnect:%{time_appconnect} time_pretransfer:%{time_pretransfer} time_redirect:%{time_redirect} time_starttransfer:%{time_starttransfer} time_total:%{time_total}\n

Beispielbefehl

$ while [ 1 ];do echo -n "$(date) - " ; curl -w @time-format.txt -o /dev/null -s https://myapp.mydom.com/v1/endpt-http; sleep 1; done | grep -v time_total:0

Ergebnisse

Mon Dec 16 17:51:47 UTC 2019 - time_namelookup:0,004 time_connect:0,015 time_appconnect:0,172 time_pretransfer:0,172 time_redirect:0,000 time_starttransfer:1,666 time_total:1,666
Mon Dec 16 17:51:50 UTC 2019 - time_namelookup:0,004 time_connect:0,015 time_appconnect:0,175 time_pretransfer:0,175 time_redirect:0,000 time_starttransfer:3,794 time_total:3,795
Mon Dec 16 17:51:55 UTC 2019 - time_namelookup:0,004 time_connect:0,017 time_appconnect:0,175 time_pretransfer:0,175 time_redirect:0,000 time_starttransfer:1,971 time_total:1,971
Mon Dec 16 17:51:58 UTC 2019 - time_namelookup:0,004 time_connect:0,014 time_appconnect:0,173 time_pretransfer:0,173 time_redirect:0,000 time_starttransfer:1,161 time_total:1,161
Mon Dec 16 17:52:00 UTC 2019 - time_namelookup:0,004 time_connect:0,015 time_appconnect:0,166 time_pretransfer:0,167 time_redirect:0,000 time_starttransfer:1,434 time_total:1,434
Mon Dec 16 17:52:02 UTC 2019 - time_namelookup:0,004 time_connect:0,015 time_appconnect:0,177 time_pretransfer:0,177 time_redirect:0,000 time_starttransfer:5,119 time_total:5,119
Mon Dec 16 17:52:08 UTC 2019 - time_namelookup:0,004 time_connect:0,014 time_appconnect:0,172 time_pretransfer:0,172 time_redirect:0,000 time_starttransfer:30,185 time_total:30,185
Mon Dec 16 17:52:39 UTC 2019 - time_namelookup:0,004 time_connect:0,014 time_appconnect:0,164 time_pretransfer:0,164 time_redirect:0,000 time_starttransfer:30,175 time_total:30,176
Mon Dec 16 17:54:28 UTC 2019 - time_namelookup:0,004 time_connect:0,015 time_appconnect:3,191 time_pretransfer:3,191 time_redirect:0,000 time_starttransfer:3,212 time_total:3,212
Mon Dec 16 17:56:08 UTC 2019 - time_namelookup:0,004 time_connect:0,015 time_appconnect:1,184 time_pretransfer:1,184 time_redirect:0,000 time_starttransfer:1,215 time_total:1,215
Mon Dec 16 18:00:24 UTC 2019 - time_namelookup:0,004 time_connect:0,015 time_appconnect:0,181 time_pretransfer:0,181 time_redirect:0,000 time_starttransfer:1,267 time_total:1,267

Ich habe das oben genutzt, um langsame Antworten auf den genannten Endpunkt zu erfassen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X