在做 Web 开发的时候,经常需要对 Web Page 或者 REST-ful API 做简单的 Benchmark。本文将介绍如何使用 cURL 进行简单快速的性能评测。本文内容将介绍如何使用 curl
分析 web 页面的网络时间,进行性能测试。
使用 curl 查看 web 页面的网络耗时
$ curl -s -w "dnslookup: %{time_namelookup} | connect: %{time_connect} | appconnect: %{time_appconnect} | pretransfer: %{time_pretransfer} | starttransfer: %{time_starttransfer} | total: %{time_total} " -o /dev/null https://www.github.com/ dnslookup: 0.008487 | connect: 0.111289 | appconnect: 0.218127 | pretransfer: 0.218243 | starttransfer: 0.316747 | total: 0.316834
可以看到请求时间为 0.3168
秒。此时:
-s, --silent
: 让 curl 保持静默模式,不会输出进度条-w
定义输出的格式,这里我们输出了多个请求过程中的时间-o /dev/null
: 这个参数用来隐藏 response 的内容-
对应的各项网络时间的含义如下,
time_namelookup:dns解析总共消耗的时间 time_connect:从开始dns解析到tcp建联成功之间总共消耗的时间 time_appconnect:从开始dns解析到ssl握手成功之间总共消耗的时间,以收到 Fin 包为准。 time_pretransfer:从开始dns解析到发起http请求之间总共消耗的时间 time_starttransfer:从开始dns请求到服务器响应首个字节之间总共消耗的时间 time_total:整个请求所消耗的时间,包含dns解析、tcp握手和ssl握手的时间
参考 man curl
中的说明,curl -w <format>
可以支持格式模板。我们可以使用 @template-name
的方式对输出格式进行自定义。比如,我们可以将时间类的格式汇总,保存为 curl-fmt.txt
,如下。
其他时间的定义,可参考cURL官方文档。
\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
执行命令测试,样例如下:
curl -s -w "@curl-fmt.txt" -o /dev/null http://www.baidu.com/ time_namelookup: 1.101 time_connect: 1.130 time_appconnect: 0.000 time_pretransfer: 1.130 time_redirect: 0.000 time_starttransfer: 1.164 ---------- time_total: 1.165
此时可以看到 DNS lookup, TCP 链接,数据传传输等信息。