请求卡在ActiveRecord :: QueryCache中间件中

Vin*_*hBS 8 mysql rack ruby-on-rails

在部署了我们的Rails应用程序(4.0.9,Ruby 2.1.2)之后,我们注意到我们的应用程序的请求会在一段时间后挂起,通常是1天左右.

使用gem rack_timer,我们能够找到被困在ActiveRecord :: QueryCache中间件的请求.

Rack Timer (incoming) -- ActiveRecord::QueryCache: 925626.7731189728 ms
Run Code Online (Sandbox Code Playgroud)

删除后,我们的应用程序似乎恢复正常.但是,我理解这个中间件的目的是提高性能,因此删除只是一个临时解决方案.我们使用带适配器的mysql(5.1.67)mysql2(0.3.13)

更新:发布此问题后,服务器再次开始挂起,这次请求被卡在ActionDispatch :: Routing :: RouteSet

I, [2014-10-13T23:17:03.661346 #32498]  INFO -- : Rack Timer (Application Action) -- ActionDispatch::Routing::RouteSet: 3667661.2360477448 ms
I, [2014-10-13T23:17:03.661946 #32498]  INFO -- : Rack Timer (Application Action) -- ActionDispatch::Routing::RouteSet: 4373914.719343185 ms
Run Code Online (Sandbox Code Playgroud)

你知道有什么理由会导致这个吗?

先感谢您.

fjy*_*iez 2

最可能的原因是你与数据库的连接中断了(防火墙,服务器配置......)并且Rails没有注意到,所以内部发生了超时ActiveRecord::QueryCache。一旦 Rails 注意到连接断开,它就会重新连接并继续执行流程。

read_timeout尝试将文件中的参数设置database.yml为 10 秒之类的值,然后检查您的连接和服务器设置。