有没有人知道$upstream_response_time
的时钟具体是什么时候开始和结束的?
文档似乎有点模糊:
保持从上游服务器接收响应所花费的时间;时间以秒为单位保持,具有毫秒分辨率。几个响应的时间用逗号和冒号分隔,就像$upstream_addr变量中的地址一样。
还有一个$upstream_header_time
值,这增加了更多的混乱。
1.我假设$upstream_connect_time
在连接建立后就停止了,但是在之前它被上游接受了?
$upstream_response_time
包含什么?- 等待上游接受所花费的时间?
- 发送请求所花费的时间?
- 发送响应标头所用的时间?
2条答案
按热度按时间63lcw9qa1#
一个更具体的定义是在它们的blog中。
$request_time-完整请求时间,从NGINX从客户端读取第一个字节开始,到NGINX发送响应体的最后一个字节结束
$upstream_connect_time-与上游服务器建立连接所花费的时间
$upstream_header_time-从建立到上游服务器的连接到接收到响应头的第一个字节之间的时间
$upstream_response_time-从建立到上游服务器的连接到接收到响应正文的最后一个字节之间的时间
所以呢
$upstream_header_time
包含在$upstream_response_time
中。mctunoxg2#
我已经调查并调试了相关的行为,结果如下:
| | start time | end time |
| - -----|- -----| ------------ |
| Nginx与上游服务器建立TCP连接之前|在Nginx向上游服务器发送HTTP请求之前| before Nginx sends HTTP request to upstream server |
| Nginx与上游服务器建立TCP连接之前|Nginx接收并处理来自上游服务器的HTTP响应中的头部后| after Nginx receives and processes headers in HTTP response from upstream server |
| Nginx与上游服务器建立TCP连接之前|Nginx接收并处理来自上游服务器的HTTP响应后| after Nginx receives and processes HTTP response from upstream server |
源码
我将解释$upstream_connect_time和$upstream_response_time之间的值是如何不同的,因为这是我最感兴趣的。
u->state->connect_time
的值表示$upstream_connect_time(以毫秒为单位),将在以下部分中获取:https://github.com/nginx/nginx/blob/3334585539168947650a37d74dd32973ab451d70/src/http/ngx_http_upstream.c#L2073而
u->state->response_time
的值,以毫秒为单位表示$upstream_response_time,在以下部分中设置:https://github.com/nginx/nginx/blob/3334585539168947650a37d74dd32973ab451d70/src/http/ngx_http_upstream.c#L4432您可以注意到,这两个值都是基于
u->start_time
计算的,u->start_time
是在www.example.com中定义的连接建立之前的时间https://github.com/nginx/nginx/blob/3334585539168947650a37d74dd32973ab451d70/src/http/ngx_http_upstream.c#L1533(注意ngx_event_connect_peer
是在nginx workerprocesses和上游服务器之间建立TCP连接的函数)。因此,这两个值都包括建立TCP连接所花费的时间。您可以通过使用gdbserver等工具进行实时调试来检查这一点。