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

Neo*_*ang 12 networking latency nginx

我正在努力提高网络应用的性能.分析应用程序本身,我发现它的响应时间是可以接受的(100ms-200ms),但是当我使用ApacheBench测试应用程序时,响应时间有时超过1秒.当我在日志中仔细观察,我发现之间有很大的差异request_time,并upstream_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
Run Code Online (Sandbox Code Playgroud)

upstream_response_time与我在网络应用程序中的分析非常接近,但request_time对于第一个请求接近一秒.

什么可能导致这种差异?

据我所知request_time,从收到的第一个字节到最后一个响应字节发送记录,它可能受网络状况和客户端问题的影响.我想知道我应该request_time尽可能多地降低平均值?

Agi*_*gis 18

request_time可能是由于客户端连接速度慢,您无法做多少.因此,高request_time并不一定代表你的服务器和/或应用程序的性能.

你真的不应该request_time在分析时花太多时间,而是测量应用程序的响应时间(即upstream_response_time).

也就是说,有一些事情你可以做,可能会影响到request_time.其中一些如下:

  • 在高速网络上移动服务器
  • 将服务器移动到客户端附近
  • 禁用Nagle的算法
  • 调整服务器的TCP堆栈(请参阅此文章).然而,这些并不一定会产生很大的不同,因为内核可以很好地为您调整它们.