有時候你覺得一個網站很慢,但通常不太清楚是只有這次慢,或者其實是普遍的現象。為了證明這是普遍的現象,需要多嘗試幾次。如果都慢得很一致的話,才能確保他真的很慢。
這是我同事教我的一段方便的 script 。可以用來記錄一段時間的 HTTP 請求的細節與每個階段消耗的時間。本例子中以 Ubuntu 的輸出為主。
1 2 3 4 | for i in {1..10} do echo "[Request Num.$i Start]" ;curl -sw "[Request Num.$i End]: %{time_namelookup} %{time_connect} %{time_appconnect} %{time_pretransfer} %{time_starttransfer} %{time_total} %{http_code} %{size_download} %{url_effective}\n" -o /dev/null --tlsv1.3 --tls-max 1.3 'https://cube.lichi-chen.com' -D - && sleep 1; done | tee time .log |
有幾個 curl 的參數比較奇怪,特別拿出來講一下。 -s
表示不要印出一些太瑣碎的東西,像是下載進度條。 -D
可以印出 header ,雖然統計得時候用不到,但留著可以備用,必要的時候可追蹤一下當時 server 是否回應了預期的東西。


輸出會是大概下面這樣:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | [Request Num.1 Start] HTTP/2 200 content-type: text/html content-length: 1856 date: Mon, 18 Sep 2023 22:04:01 GMT access-control-allow-origin: * access-control-allow-methods: GET, HEAD last-modified: Mon, 28 Jun 2021 19:09:54 GMT etag: "40c41863509ee333adad82e7b855e350" server: AmazonS3 vary: Accept-Encoding x-cache: Hit from cloudfront via: 1.1 2125e078e0211a418e353b9df974d88a.cloudfront.net (CloudFront) x-amz-cf-pop: DUB2-C1 alt-svc: h3=":443"; ma=86400 x-amz-cf-id: uQ1AT04EHd3pTsF2QREDPTtKblwaaiHY0SoHr6ZbedT4ioKZR6on6w== age: 52 [Request Num.1 End]: 0.000825 0.001839 0.091115 0.091211 0.093939 0.095057 200 1856 https://cube.lichi-chen.com/ [Request Num.2 Start] (...) |
有了如上的紀錄後,可以進一步透過 st 指令把資料統計。Ubuntu 上面叫做 st-console 。舉例來說,我想調查 TLS 時間 (time_appconnect – time_connect) 的 90 百分位數,可以用下列命令做到。
1 | grep '\[Request Num.* End\]' time.log | awk '{print $6-$5}' | st-console--default --transpose --percentile=90 |