我有一个web服务,它接收JSON格式的数据,处理数据,然后将结果返回给请求者。

我想使用cURL测量请求、响应和总时间。

我的请求示例如下:

curl -X POST -d @file server:port

我现在用Linux中的time命令来测量:

time curl -X POST -d @file server:port

然而,time命令只测量总时间——这并不是我想要的。

有什么方法可以使用cURL来测量请求和响应时间吗?


当前回答

选项1:测量总时间:

curl -o /dev/null -s -w 'Total: %{time_total}s\n'  https://www.google.com

样例输出:

Total: 0.441094s

选项2:获取建立连接的时间,第一个字节的时间(TTFB)和总时间:

curl -o /dev/null -s -w 'Establish Connection: %{time_connect}s\nTTFB: %{time_starttransfer}s\nTotal: %{time_total}s\n'  https://www.google.com

样例输出:

Establish Connection: 0.020033s
TTFB: 0.417907s
Total: 0.435486s

参考:得到响应时间与卷曲

其他回答

一个你可以添加到你的.bashrc etc的快捷方式,基于这里的其他答案:

function perf {
  curl -o /dev/null -s -w "%{time_connect} + %{time_starttransfer} = %{time_total}\n" "$1"
}

用法:

> perf stackoverflow.com
0.521 + 0.686 = 1.290

Hey比Apache Bench好,有更少的SSL问题

./hey https://google.com -more
Summary:
  Total:    3.0960 secs
  Slowest:  1.6052 secs
  Fastest:  0.4063 secs
  Average:  0.6773 secs
  Requests/sec: 64.5992

Response time histogram:
  0.406 [1] |
  0.526 [142]   |∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
  0.646 [1] |
  0.766 [6] |∎∎
  0.886 [0] |
  1.006 [0] |
  1.126 [0] |
  1.246 [12]    |∎∎∎
  1.365 [32]    |∎∎∎∎∎∎∎∎∎
  1.485 [5] |∎
  1.605 [1] |

Latency distribution:
  10% in 0.4265 secs
  25% in 0.4505 secs
  50% in 0.4838 secs
  75% in 1.2181 secs
  90% in 1.2869 secs
  95% in 1.3384 secs
  99% in 1.4085 secs

Details (average, fastest, slowest):
  DNS+dialup:    0.1150 secs, 0.0000 secs, 0.4849 secs
  DNS-lookup:    0.0032 secs, 0.0000 secs, 0.0319 secs
  req write:     0.0001 secs, 0.0000 secs, 0.0007 secs
  resp wait:     0.2068 secs, 0.1690 secs, 0.4906 secs
  resp read:     0.0117 secs, 0.0011 secs, 0.2375 secs

Status code distribution:
  [200] 200 responses

参考文献

https://github.com/rakyll/hey

测量命令执行时间的通用解决方案

Linux / Mac OS / Unix

在Linux上,您可以使用time命令来测量执行一个命令所花费的时间

time curl https://en.wikipedia.org/wiki/Cat 

输出:


ect...
</body>
</html>

real    0m0.565s
user    0m0.011s
sys     0m0.024s

这里的总时间/响应时间是真实时间。

这个解决方案是通用的,应该适用于任何Unix命令

time sleep 5

输出:

real    0m5.001s
user    0m0.001s
sys 0m0.000s

视窗电源外壳

您可以使用测量命令

以下是答案:

curl -X POST -d @file server:port -w %{time_connect}:%{time_starttransfer}:%{time_total}

所有与-w一起使用的变量都可以在man curl中找到。

下面是一个Bash单行程序,可以重复访问同一个服务器:

for i in {1..1000}; do curl -s -o /dev/null -w "%{time_total}\n" http://server/get_things; done