使用Curl计算服务器处理时间

18

我正在使用curl的--write-out选项获取请求时间信息,如本文所述

以下是其中一次请求的示例输出:

        time_namelookup:  0.031
           time_connect:  0.328
        time_appconnect:  1.560
       time_pretransfer:  1.560
          time_redirect:  0.000
     time_starttransfer:  1.903
                        ----------
             time_total:  2.075
我的问题是:如何确定服务器处理请求所需的时间?答案是:
time_starttransfer - time-connect

那么,是指连接建立后服务器开始发送其响应的时间吗?这似乎正确,但我想确认一下。

有关curl计时变量的详细信息,请参阅此处:http://curl.haxx.se/libcurl/c/curl_easy_getinfo.html


4
我也一直在试图理解这个问题。我发现http://curl.haxx.se/docs/manpage.html上的时间描述更易于阅读。我目前最好的猜测是远程处理时间为`time_starttransfer - time_pretransfer。我的理解是time_pretransfer - time_connect`也包括发送请求所需的时间。 - Schwartzie
增加了一个关于文档改进的错误报告:https://github.com/curl/curl/issues/6452 - gavenkoa
3个回答

16

是的,(time_starttransfer - time-connect) 是从curl注意到连接开始直到第一个字节到达的时间。需要注意的是,它还包括传输时间,因此对于远程站点来说,由于传输时间较长,所以总时间会更长。


3
“它还包括传输时间”中的哪个传输时间?请求传输?还是响应传输?还是两者都包括?curl的man页面不清楚。例如,对于time_pretransfer,它说:“从开始到文件传输即将开始所用的时间(以秒为单位)。这包括所有与特定协议有关的预传输命令和协商。”哪个文件传输?请求还是响应?“文件”指的是什么? - Cheeso

9

如果您不想计算SSL握手部分,则是time_starttransfer - time_pretransfer

以下是来自Cloudflare博客的一个漂亮的图表:

enter image description here


7

我认为你是对的,(time_starttransfer - time_connect) 确实是服务器处理请求所花费的时间。

但是——我也想知道 time_connect 和 time_pretransfer 的区别(受@Schwartzie和@Cheeso评论的启发)。

通过查看网络上的几个curl查询,我发现有时它们相等,有时它们不相等。

然后我想出来了(至少我这么认为),它们只有在HTTPS请求时才会有所不同,因为服务器需要一些时间来解密ssl层,这并不完全是目标应用程序所花费的时间,而是托管应用程序/服务的服务器所花费的时间。

解密ssl的时间(以及连接的时间,在time_connect中给出)是time_appconnect,仅当它为0(例如非https请求)时-time_connect和time_pretransfer相等,否则对于https请求,它们是不同的,并且对于https,time_pretransfer将等于time_appconnect(而不是time_connect)。

请参阅以下两个示例:

  • curl -kso /dev/null -w "time_connect=%{time_connect}, time_appconnect:%{time_appconnect}, time_pretransfer=%{time_pretransfer}\n" http://www.csh.rit.edu

    • time_connect=0.128, time_appconnect:0.000, time_pretransfer=0.128
  • curl -kso /dev/null -w "time_connect=%{time_connect}, time_appconnect:%{time_appconnect}, time_pretransfer=%{time_pretransfer}\n" https://www.csh.rit.edu

    • time_connect=0.133, time_appconnect:0.577, time_pretransfer=0.577

因此,我认为与time_connect相比,time_pretransfer更精确,因为它也会考虑ssl连接以及其他我不知道的事情。

总之,对于这个问题,我会给出更精确的答案:

我该如何确定服务器处理请求所花费的时间?
可能是:time_starttransfer - time_pretransfer。
正如@Schwartzie已经提到的,我只是想了解为什么这样做。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接