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),但这显然是一项更大的任务。