nginx日志request_time 和upstream_response_time区别

在根据nginx的accesslog中 r e q u e s t t i m e 进 行 程 序 优 化 时 , 发 现 有 个 接 口 , 直 接 返 回 数 据 , 平 均 的 request_time进行程序优化时,发现有个接口,直接返回数据,平均的 requesttimerequest_time也比较大。原来 r e q u e s t t i m e 包 含 了 用 户 数 据 接 收 时 间 , 而 真 正 程 序 的 响 应 时 间 应 该 用 request_time包含了用户数据接收时间,而真正程序的响应时间应该用 requesttimeupstream_response_time。

下面介绍下2者的差别:
1、request_time

官网描述:request processing time in seconds with a milliseconds resolution; time elapsed between the first bytes were read from the client and the log write after the last bytes were sent to the client 。
指的就是从接受用户请求的第一个字节到发送完响应数据的时间,即包括接收请求数据时间、程序响应时间、输出
响应数据时间。
2、upstream_response_time

官网描述:keeps times of responses obtained from upstream servers; times are kept in seconds with a milliseconds resolution. Several response times are separated by commas and colons like addresses in the $upstream_addr variable

是指从Nginx向后端(php-cgi)建立连接开始到接受完数据然后关闭连接为止的时间。

从上面的描述可以看出, r e q u e s t t i m e 肯 定 比 request_time肯定比 requesttimeupstream_response_time值大,特别是使用POST方式传递参数时,因为Nginx会把request body缓存住,接受完毕后才会把数据一起发给后端。所以如果用户网络较差,或者传递数据较大时, r e q u e s t t i m e 会 比 request_time会比 requesttimeupstream_response_time大很多。

所以如果使用nginx的accesslog查看php程序中哪些接口比较慢的话,记得在log_format中加入$upstream_response_time。

你可能感兴趣的:(nginx)