在linux shell脚本中,我正在运行时间来反对对REST服务的curl请求。
假设一个线程,如果我取结果的实时时间并减去用户和系统时间,剩余时间是否会被视为网络延迟和完成请求所需服务所需时间的汇总?
如果没有,是否有一种简单的方法可以获得完成linux shell请求所需的网络延迟和服务时间?
参考:What do 'real', 'user' and 'sys' mean in the output of time(1)?
答案 0 :(得分:2)
如果您使用curl
,获取请求时间详细信息的最简单方法是使用-w
/--write-out
选项。
您可以格式化输出以包含以下变量:
time_appconnect
从开始到SSL / SSH / etc连接/握手到远程主机的时间(以秒为单位)已完成。 (在7.19.0中添加)
time_connect
从开始到TCP连接到远程主机(或代理)的时间(以秒为单位)已完成。
time_namelookup
从开始到名称解析完成所用的时间(以秒为单位)。
time_pretransfer
从开始到文件传输即将开始所用的时间(以秒为单位)。这包括特定于所涉及的特定协议的所有预转移命令和协商。
time_redirect
所有重定向步骤所花费的时间(以秒为单位)包括在最终事务开始之前进行名称查找,连接,预传输和传输。 time_redirect显示多个重定向的完整执行时间。 (在7.12.3中添加)
time_starttransfer
从开始到第一个字节即将传输的时间(以秒为单位)。这包括time_pretransfer以及服务器计算结果所需的时间。
time_total
完整操作持续的总时间(以秒为单位)。时间将以毫秒分辨率显示。
例如:
$ curl httpbin.org/ip -s -o output -w 'dns: %{time_namelookup} sec\nconnect: %{time_connect} sec\nuntil first byte: %{time_starttransfer} sec\ntotal: %{time_total} sec\n'
dns: 0.061 sec
connect: 0.297 sec
until first byte: 0.502 sec
total: 0.502 sec
并回答你的直接问题 - 不,从挂钟时间减去进程和处理内核时间通常不会给你网络延迟或响应时间。考虑具有许多进程竞争CPU的系统:在这种情况下,curl
进程的挂钟可能比实际服务响应时间长得多。