使用CURL跟踪一个http请求的各段执行时间

发表于2018-12-25| 分类于系统运维

很多场景我们需要获取站点或者某个接口的各类响应时间,在不适用其他软件工具的情况下,系统命令CURL可以完美的帮我们打印出各段的响应时间。

命令演示

# curl -o /dev/null -s -w %{time_namelookup}::%{time_connect}::%{time_appconnect}::%{time_pretransfer}::%{time_starttransfer}::%{time_total}"\n"  "http://www.baidu.com"

我简单的向www.bai.com 发送了一个get请求。 其中-o 选项把curl返回内容数据的写到/dev/null文件中去。-s为静默模式,把所有进度相关信息从stdout中屏蔽掉。 -w选项指定了请求完成后输出什么信息出来。

-w FORMAT 格式为一个字符串,可以包含任意数量变量字符串混合的纯文本,也支持使用一个已@filename命名的文件来对其结果做格式化。其支持的变量参数可以查看 curl帮助文档

各类响应时间

演示命令的各参数含义如下,文中未做定义的变量含义请查阅curl帮助文档

time_namelookup:DNS 解析域名耗时
time_connect:client和server端建立TCP连接耗时
time_appconnect: SSL建连耗时
time_pretransfer:从client发出请求;到web的server到文件传输即将开始的耗时
time_starttransfer:从client发出请求;到web的server响应第一个字节的时间,其中包括time_pretransfer的耗时
time_total:client发出请求;到web的server发送会所有的相应数据的时间
speed_download:下载速度  单位 byte/s

格式化输出

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

$ curl -w "@format.txt" -o /dev/null -s  https://www.baidu.com

            time_namelookup:  1.511
               time_connect:  1.724
            time_appconnect:  2.281
           time_pretransfer:  2.281
              time_redirect:  0.000
         time_starttransfer:  2.510
                            ----------
                 time_total:  2.724