如何量測與統計 HTTP 請求的時間?

有時候你覺得一個網站很慢,但通常不太清楚是只有這次慢,或者其實是普遍的現象。為了證明這是普遍的現象,需要多嘗試幾次。如果都慢得很一致的話,才能確保他真的很慢。

這是我同事教我的一段方便的 script 。可以用來記錄一段時間的 HTTP 請求的細節與每個階段消耗的時間。本例子中以 Ubuntu 的輸出為主。

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 是否回應了預期的東西。

輸出會是大概下面這樣:

[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 百分位數,可以用下列命令做到。

grep '\[Request Num.* End\]' time.log | awk '{print $6-$5}' | st-console--default --transpose  --percentile=90 

Posted

in

by

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *