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

标签 mysql ruby-on-rails rack

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

使用 gem rack_timer,我们能够找出请求卡在 ActiveRecord::QueryCache 中间件处。

Rack Timer (incoming) -- ActiveRecord::QueryCache: 925626.7731189728 ms

删除后,我们的应用程序似乎恢复了正常。但是,我知道这个中间件的目的是提高性能,所以删除只是一个临时解决方案。我们使用带有适配器 mysql2 (0.3.13)

的 mysql (5.1.67)

更新:在我发布这个问题之后,服务器又开始挂起,这次请求卡在了 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

你知道有什么原因会导致这种情况吗?

提前谢谢你。

最佳答案

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

尝试将 database.yml 文件中的参数 read_timeout 设置为 10 秒左右,并检查您的连接和服务器设置。

关于mysql - 请求卡在 ActiveRecord::QueryCache 中间件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26343820/

相关文章:

ruby-on-rails - 在特定的 Rails 路由上触发 Rack 中间件

ruby - 如何制作 Rack session cookie httponly?

ruby-on-rails - RubyGem 版本错误 : rack(1. 0.0 不是 ~> 1.0.1)

mysql等效数据类型

java - 在 Spring + mysql 中使用 ACID 属性进行批量更新

ruby-on-rails - 标记要在模块中使用的特定 Rails 模型的最佳方法

ruby-on-rails - 自己使用 facebook iOS 客户端授权到服务器

MySQL 第二次更新时错误地更新整数列

php+mysqli while(false !== ($data = $mysqli_res->fetch_assoc)) 创建无限循环

ruby-on-rails - rails : Calculate how many days are overlapped between 2 date ranges