排障过程中发现curl的一个不太常见参数-w,检查 time_appconnect 非常好用,记录一下。
接到用户反馈一个服务容器内部调用一个接口是相当慢会出现卡顿,如图示
上图2次curl,一次秒出结果,1次无反应,这样的信息其实不全,当然想查看明细,网上找了一圈,发现了1个非常有用的参数。
-w 格式化输出 https://curl.haxx.se/docs/manpage.html#-w
https://cizixs.com/2017/04/11/use-curl-to-analyze-request/
1 2 3 4 5 6 7 8 9 10 11 |
<span class="line">cat curl-format.txt</span> <span class="line"> time_namelookup: %{time_namelookup}\n</span> <span class="line"> time_connect: %{time_connect}\n</span> <span class="line"> time_appconnect: %{time_appconnect}\n</span> <span class="line"> time_redirect: %{time_redirect}\n</span> <span class="line"> time_pretransfer: %{time_pretransfer}\n</span> <span class="line"> time_starttransfer: %{time_starttransfer}\n</span> <span class="line"> ----------\n</span> <span class="line"> time_total: %{time_total}\n </span> |
- time_namelookup: DNS解析时间
- time_connect:tcp建联时间
- time_appconnect:SSL/SSH 等上层协议建立连接的时间,比如 connect/handshake 的时间。注意,即使curl语句中带有-k参数(忽略证书校验),这一项时间仍然存在,因为-k只是忽略证书的校验,本身SSL握手仍然存在。
- time_redirect:从开始到最后一个请求事务的时间
- time_pretransfer:从请求开始到开始传输的时间
- time_total:这次请求花费的全部时间
本次检查命令如下
curl -w "@curl-format" -o /dev/null -s https://域名打码.com:9443/receiveHTTPData
2020-11-13新增改进版
alias curltime="curl -w \"@curl-format\" -o NUL -s "
下次就可以直接 curltime blog.wanjie.info 出结果了
网上说windows下 也行,没试了
1 |
curl -w "@%~dp0curl-format.txt" -o NUL -s %* |
响应正常时,0.6秒完成全过程。
异常时,20多秒完成全过程。其中耗时最大的是 time_appconnect这一段,即 SSL/SSH 等上层协议建立连接的时间,比如 connect/handshake 的时间。
后来多次容器内外,甚至本地电脑测试,结果相同。
找到了cloudflare关于一次访问各段花费时间描述说明,如下图
更多详情可以参考这里 https://blog.cloudflare.com/a-question-of-timing/
文章评论