【发布时间】:2016-08-17 04:47:36
【问题描述】:
我正在对一个网站进行负载测试,并注意到我从 Web 服务器(在本例中为 tornado web server)和 Chrome 开发人员工具收到的时间信息之间存在相当大的差异。 Web 服务器提供了一个服务,作为 nginx 后面的一个进程(实际上是由 supervisor 管理的几个进程)运行。还有一个 Web 界面可以与此服务进行交互。这个龙卷风网络服务器检索查询相当快(平均 30 毫秒)。但是,Chrome 开发者工具的响应时间要慢得多(大约 240 毫秒)。
每次查询都会检索一些信息,需要查询额外的资源(主要是图片)。我认为这是造成如此大差异的主要原因,但我尝试使用 curl 和 time_starttransfer 测量 172 毫秒。
另一方面,对 nginx 使用这个日志记录指令:
log_format timed_combined '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" '
'$request_time $upstream_response_time $pipe';
我能够检查到 request_time 和 upstream_response_time 实际上非常小(45 毫秒)。
响应时间出现这种差异的原因可能是什么?
更新
这是 Firebug 的截图:
我认为我无法通过有限的信息来计算延迟。
更新 2
我能够通过 curl 获得更好的信息。不过,我不确定它是否准确:
time_namelookup: 0.000
time_connect: 0.062
time_appconnect: 0.000
time_pretransfer: 0.062
time_redirect: 0.000
time_starttransfer: 0.172
----------
time_total: 0.240
据我所知,time_starttransfer - time_pretransfer = content_generation,所以 0.172 - 0.062 = 0.110 秒。但是,查看日志,Web 服务器报告 0.044s 和来自 nginx 的 request_time 同意(0.045s)。此外,我认为应该是延迟的 curl 输出中的 time_connect 并没有那么大(0.062 秒)。
有趣的是time_starttransfer - time_connect*2 = 0.048 与 nginx 或 tornado 报告的时间相似(0.048 vs 0.044)。但这个计算不应该是正确的。有谁知道证明 chrome 开发人员工具/curl 与 Web 服务器/nginx 响应时间之间差异的正确方法是什么?
【问题讨论】:
-
开发人员工具还包括响应时间延迟,但服务器日志不包括。找出客户端和服务器之间的延迟,然后交叉检查这些值。
-
有趣。我应该如何测量延迟?平?
-
ping 应该让您接近实际数字,因为它使用 smtp 而不是 http。我认为像 firebug 或 yslow 这样的浏览器插件可以为您提供延迟数字。
-
太棒了。我会检查萤火虫。谢谢。
-
不幸的是,Firebug 提供了一个“等待”时间,包括从客户端发送请求到服务器的时间+服务器处理请求的时间。我认为我无法使用该信息确认服务器的测量值。 Yslow 由于某种原因不能作为 Firefox 插件正常工作。
标签: performance nginx tornado timing