nginx-request_time和upstream_response_time的区别
本文最后更新于 456 天前,其中的信息可能已经有所发展或是发生改变。

nginx-request_time和upstream_response_time的区别

定义

一个正常的请求过程如下:

  1. 用户发出请求
  2. 建立NGINX连接
  3. 发送响应
  4. 接收程序的响应数据
  5. 关闭NGINX连接

$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.

指的就是从接受用户请求的第一个字节到发送完响应数据的时间,即包括接收请求数据时间、程序响应时间、输出响应数据时间。 对于此部分对应的是1+2+3+4+5

$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)建立连接开始到接受完数据然后关闭连接为止的时间。 对于此部分对应的是2+3+4+5

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

如果要从access_log中查看较慢的接口的话,可以在log_format中加入$upstream_response_time

分析

从网上看到下列一组图片,感觉画的很形象。

  • request_time是从接收到客户端的第一个字节开始,到把所有的响应数据都发送完为止。

image-20231020111121792

  • upstream_response_time是从与后端建立TCP连接开始到接收完响应数据并关闭连接为止。

image-20231020111132847

所以,request_time会大于等于upstream_response_time

性能优化

对于较高的request_time很可能是由于连接速度较慢的客户端造成的,对此无能为力,但是较高的request_time并不代表服务器或者程序的性能不够。

总体来说,没必要在request_time上花费较多时间,而是应该重点关注upstream_response_time

nginx log_format

$remote_addr,$http_x_forwarded_for  #记录客户端IP地址
$remote_user   #记录客户端用户名称
$request       #记录请求的URL和HTTP协议
$status        #记录请求状态
$body_bytes_sent  #发送给客户端的字节数,不包括响应头的大小;该变量与Apache模块mod_log_config李的“%B”参数兼容
$bytes_sent    #发送给客户端的总字节数
$connection    #连接到序列号
$connection_requests #当前通过一个链接获得的请求数量
$msec       #日志写入时间,单位为秒精度是毫秒。
$pipe       #如果请求是通过HTTP流水线(pipelined)发送,pipe值为“p”,否则为".".
$http_referer  #记录从那个页面链接访问过来的
$http_user_agent  #记录客户端浏览器相关信息
$request_length   #请求的长度(包括请求行,请求头和请求正文)。
$request_time #请求处理时间,单位为秒,精度毫秒;从读入客户端的第一个字节开始,知道把最后一个字符发送给客户端后进行日志写入位置。
$time_iso8601 ISO8601标准格式下的本地时间
$time_local  #通用日志格式下的本地时间

Nginx 对应的格式

log_format aka_logs escape=json
  '{"@timestamp":"$time_iso8601",'
  '"host":"$hostname",'
  '"server_ip":"$server_addr",'
  '"client_ip":"$remote_addr",'
  '"xff":"$http_x_forwarded_for",'
  '"domain":"$host",'
  '"url":"$uri",'
  '"referer":"$http_referer",'
  '"args":"$args",'
  '"upstreamtime":"$upstream_response_time",'
  '"responsetime":"$request_time",'
  '"request_method":"$request_method",'
  '"status":"$status",'
  '"size":"$body_bytes_sent",'
  '"request_body":"$request_body",'
  '"request_length":"$request_length",'
  '"protocol":"$server_protocol",'
  '"upstreamhost":"$upstream_addr",'
  '"file_dir":"$request_filename",'
  '"http_user_agent":"$http_user_agent"'
    '}';

转载

1.https://zhuanlan.zhihu.com/p/438152265?utm_id=0

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇