为什么在nginx的access.log中,request_time比upstream_response_time大得多?

25

我正在尝试提高一个Web应用程序的性能。通过对应用程序本身进行分析,我发现其响应时间非常可接受(100ms-200ms),但是当我使用ApacheBench测试该应用程序时,响应时间有时会超过1秒。查看日志时,有时会发现request_timeupstream_response_time之间存在很大差异:

"GET /wsq/p/12 HTTP/1.0" 200 114081 "-" "ApacheBench/2.3" 0.940 0.286
"GET /wsq/p/31 HTTP/1.0" 200 114081 "-" "ApacheBench/2.3" 0.200 0.086

upstream_response_time与我的Web应用程序分析结果非常接近,但对于第一个请求,request_time接近一秒钟。

这种差异是什么原因造成的呢?

我了解到request_time是从接收到第一个字节到发送最后一个响应字节的时间记录,它可能会受网络状况和客户端问题的影响。我想知道我应该怎么做才能尽可能地减少平均request_time?


我需要的是一些Nginx参数调整来减少请求时间? - NeoWang
嗨@NeoWang,我也遇到了类似的问题。你能确定问题的来源吗? - serkan_ozal
1个回答

35
一个高的request_time可能是由于慢速连接的客户端引起的,对此你无法做太多事情。因此,高的request_time不一定代表你的服务器和/或应用程序的性能。
当进行分析时,你真的不应该花太多时间在request_time上,而是要测量诸如应用程序的响应时间(即upstream_response_time)之类的东西。
话虽如此,有些事情你是可以做的,并且可能会影响到request_time。其中一些事情如下:
  • 将你的服务器放在高速网络上
  • 将你的服务器放在靠近客户端的位置
  • 禁用 Nagle 算法
  • 调整服务器的 TCP 栈(参见 这篇文章)。但是这些并不一定会产生很大的差异,因为内核已经很好地为你调整了它们。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接