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

时间:2016-05-25 07:52:27

标签: networking nginx latency

我正在努力改善网络应用的效果。分析应用程序本身,我发现它的响应时间是可以接受的(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与我在网络应用中的分析非常接近,但第一次请求时request_time接近一秒。

什么可能导致这种差异?

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

1 个答案:

答案 0 :(得分:16)

request_time可能是由于连接速度较慢的客户端造成的,您无法做多。因此,高request_time 不一定表示服务器和/或应用程序的性能。

在分析时你真的不应该花费太多时间在request_time 上,而是测量应用程序的响应时间(例如upstream_response_time)。

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

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