我不知道"排队时间"是我尝试记录的正确术语,也许TTFB(第一个字节的时间)更正确。
我试图用我做过的测试来解释得更好:
我写了一个小python应用程序(flask框架),有一个函数(一个端点),需要大约5秒才能完成整个过程(但同样的结果,睡眠时间为5秒)。
我使用uWSGI作为应用服务器,配置了1个进程和1个线程,nginx作为反向代理
使用此配置,如果我从浏览器执行两个并发请求,我看到的是第一个在大约5秒内完成,第二个在大约10秒内完成。
没关系,只有一个uWSGI进程,第二个请求必须等待第一个请求完成,但我要记录的是第二个请求留在" queue"等待从uWSGI处理。
我尝试了所有可以找到的nginx日志变量,看起来与我的需求相关:
$request_time
以毫秒的分辨率请求处理时间(以秒为单位);从客户端读取第一个字节之间经过的时间,并将最后一个字节发送到客户端后的日志写入
$upstream_response_time
花时间从上游服务器接收响应;时间以秒为单位,分辨率为毫秒。
$upstream_header_time
花费时间从上游服务器接收响应头(1.7.10);时间以秒为单位,分辨率为毫秒。
但是所有这些请求都报告同一时间,大约5秒钟
我还尝试添加日志变量$msec
时间(以秒为单位),日志写入时的分辨率为毫秒
和自定义变量$my_start_time
,在此上下文中使用set $my_start_time "${msec}";
在服务器部分的开头初始化msec是:
以毫秒为单位的当前时间(毫秒分辨率)
但在这种情况下,两次请求的两次差异大约为5秒。
我想nginx应该知道我尝试记录的时间或者至少是请求的总时间,我可以从中减去"请求时间"并获得等待时间。
如果我使用chrome浏览器分析请求并检查瀑布,我看到,对于第一个请求,总共约5秒的时间,其中几乎全部在行中等待(TTFB)"而对于第二个请求,我看到总时间约为10秒,行中约有5个等待(等待(TTFB)"在行中约有5个"停滞" 我希望从服务器端登录的时间是" Stalled"铬报告的时间;来自这个问题:
Understanding Chrome network log "Stalled" state
我知道这次与代理协商有关,所以我认为它与nginx有关,可以作为反向代理。
测试配置是通过长时间的过程来完成的,以便更容易地测量这些时间,但是只要有更多的并发请求然后uWSGI处理,时间就会存在,尽管会更短。
我的遗物中是否遗漏了什么?
这个"队列时间"的正确名称是什么?
我该如何记录呢?
提前感谢任何建议