记录nginx"排队时间"

时间:2017-09-20 10:37:40

标签: python performance nginx logging uwsgi

我不知道"排队时间"是我尝试记录的正确术语,也许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处理,时间就会存在,尽管会更短。

我的遗物中是否遗漏了什么? 这个"队列时间"的正确名称是什么? 我该如何记录呢?

提前感谢任何建议

0 个答案:

没有答案