为什么我的请求排队时间这么长?

为什么我的请求排队时间这么长?

我正在运行 Rails 应用服务器。我的设置是:

  • Apache 2,使用 mod_ssl 作为 https 和 ssl 客户端证书
  • Phusion 乘客 5
  • Rails 4
  • Ruby 2.1

我使用 NewRelic 来监控正在运行的应用程序。我最近启用了对请求排队延迟的监控,主要是出于好奇。我惊讶地发现请求队列中的延迟通常与实际的 ruby​​ 代码和数据库执行时间一样长甚至更长。~200 毫秒似乎很高,对吧?

请求队列延迟严重

大多数在线信息表明,这种情况发生在请求队列等待工作器可用时,但事实并非如此。如下所示,我们几乎没有使用我们配置的实例。在高峰期,我们的利用率很少超过 30%。

工作实例的利用率

其他几点说明:

  • Apache 和 Passenger 位于同一台服务器上,因此不会因系统时钟不同步而出现错误计时问题。
  • 至于 SSL 处理,Apache 会获取客户端 SSL 证书并将其作为标头附加到请求中。然后,rails 应用程序会处理其余的处理。

这可能是什么问题?

答案1

200 毫秒似乎并不那么糟糕。“请求排队”指标是 Web 服务器记录请求和 New Relic 代理加载(之后before_filters)之间的时间度量。测量方式可能会使问题看起来像是存在,但实际上并不存在。您的延迟很好且均匀,没有峰值表明您缺少工作者或资源/CPU 不足。您可以使用来watch passenger-status检查这一点。您还可以使用 Linux 实用程序在本地仔细检查服务器的资源使用情况:

top, iotop, vmstat, sar (systat)

还想寻找优化?检查 New Relic 代理之前执行的任何内容。可能的痛点:

这需要一些挖掘。祝你好运!

相关内容