Der schnellste Weg, die Dauer eines API-Aufrufs zu sehen, ist curl -s -o /dev/null -w '%{time_total}\n' https://api.example.com/, das nur die Gesamtzeit ausgibt und sonst nichts. Diese eine Zahl sagt nicht, ob die Verzögerung an DNS, am Netzwerk, an TLS oder am Server selbst liegt — dafür muss man die Anfrage in Phasen zerlegen. Hier kommen fünf Zahlen statt einer, und was mit jeder anzufangen ist.
1. Wie lange hat die Anfrage tatsächlich gedauert?
$ clai wie viele sekunden braucht diese adresse zum antworten→ curl -s -o /dev/null -w '%{time_total}\n' https://cliai.tech/1.244094
-o /dev/null verwirft den Antwortkörper, -s blendet die Fortschrittsanzeige aus, -w gibt nur das aus, was verlangt wurde. Jetzt gibt es eine Zahl, aber sie erklärt nichts.
2. Die Zeit nach Phasen aufschlüsseln
$ clai schluessle die antwortzeit nach phasen auf: dns, verbindung, tls, erstes byte→ curl -s -o /dev/null -w 'dns: %{time_namelookup}\nconnect: %{time_connect}\ntls: %{time_appconnect}\nttfb: %{time_starttransfer}\ntotal: %{time_total}\n' https://cliai.tech/dns: 0.000782connect: 0.299098tls: 0.414729ttfb: 1.124750total: 1.244094
Die Werte sind kumulativ, nicht unabhängig — entscheidend sind die Differenzen zwischen ihnen. DNS brauchte 0,0008s, der Aufbau der TCP-Verbindung 0,298s, der TLS-Handshake 0,116s, und von TLS-bereit bis zum ersten Byte vergingen 0,71s — das ist die Denkzeit des Servers. Genau dort steckt das Problem, falls es eins gibt.
3. Differenzen lesen, nicht die absoluten Werte
time_namelookup über 0,1s deutet auf den Resolver oder einen kalten Cache hin. connect - namelookup ist die Netzwerklatenz zum Server, ungefähr die Hälfte des Round-Trip-Pings. starttransfer - appconnect ist die Zeit, die der Server über die Anfrage nachgedacht hat. total - starttransfer ist die Übertragungszeit des Bodys, und die hängt von der Antwortgröße ab.
4. War es überhaupt ein 200er?
$ clai zeig die zeit, den statuscode und die groesse des bodys→ curl -s -o /dev/null -w 'code: %{http_code} size: %{size_download} total: %{time_total}\n' https://cliai.tech/code: 200
Eine Zeit ohne Statuscode ist wertlos — ein schneller 500er heißt nicht, dass alles in Ordnung ist. Die vollständige Liste der Variablen steht in man curl, unter WRITE-OUT VARIABLES.
5. Eine Messung reicht nicht
$ clai miss die antwortzeit fuenfmal hintereinander→ for i in $(seq 5); do curl -s -o /dev/null -w '%{time_total}\n' https://cliai.tech/; done
Eine einzelne Messung bedeutet nichts. Die erste Anfrage ist fast immer langsamer, wegen kaltem DNS und Verbindungsaufbau. Achten Sie auf die Streuung über mehrere Läufe, nicht auf die erste Zahl.
6. Das Format in eine Datei auslagern
$ clai speichere das messformat in einer datei und verwende sie→ curl -s -o /dev/null -w @curl-format.txt https://cliai.tech/
-w @datei liest das Format aus einer Datei, sodass die lange Inline-Zeichenkette nicht mehr im Weg ist. Diese Datei landet meist im Repository neben den anderen Check-Skripten.
Stolperfallen
- Die Werte sind kumulativ.
time_appconnectenthält bereits DNS und die Verbindung. Ziehen Sie die vorherige Phase ab, sonst schließen Sie, TLS habe eine halbe Sekunde gedauert, obwohl das die Summe von allem davor ist. time_appconnectist bei reinem HTTP null. Ohne TLS gibt es diese Phase schlicht nicht, und die Null hier ist kein Messfehler.- curl misst eine Anfrage, keine Performance. Für Last braucht man
hey,wrkoderk6. curl beantwortet "wo geht die Zeit hin", nicht "wie viel Traffic hält das aus".
Verwandte Fragen
Was ist TTFB? Time to first byte — der Wert time_starttransfer in der Ausgabe. Er zeigt meist am klarsten die Geschwindigkeit des Backends.
Warum ist die erste Anfrage immer langsamer? Kalter DNS-Cache, TCP-Aufbau und der TLS-Handshake. Eine wiederholte Anfrage über Keep-Alive überspringt alle drei.
Wie messe ich nur DNS? %{time_namelookup} allein, oder dig +stats, das die Auflösungszeit getrennt vom Rest anzeigt.
Siehe auch
- Netzwerk-Triage in Alltagssprache
- JSON auf der Kommandozeile
- Prüfen, ob ein Port auf einem Remote-Server offen ist
Schluss mit dem Auswendiglernen von curl--w-Formaten – beschreiben Sie, was Sie messen wollen, CliAI schreibt den Befehl. In einer Zeile installieren.