机架::锁定#呼叫时间过长



Newrelite说Rack::Lock#call大约需要9秒。

请参阅以下快照:

http://prntscr.com/ay7ccx

我们有以下服务器配置

  • Ubuntu 14.04 64位
  • 彪马,带2个工人,最多1到6个螺纹
  • Nginx作为前端
  • Rails 4和Ruby 2
  • 7 GB RAM和4核cpu

有人能帮助解释为什么在中间件上花费这么多时间吗?

这听起来像是rails的多线程模式关闭了。这添加了Rack::Lock中间件,后者反过来使用互斥锁来确保每个rails实例一次处理一个请求。您看到的数字表明,这导致请求在rails实例中排队。

这是allow_concurency设置的控制器,默认设置为false。

顺便说一句,MRI不擅长并发性(如果你是cpu绑定的)——你最好用更少的线程运行更多的工作程序。你也可以切换到jruby(它没有GIL),但这显然是一项更大的任务。

最新更新