mongodb - 每 20 分钟到 2 小时体验一次 Mongo::OperationTimeout

标签 mongodb mongoid

我似乎每隔 20 分钟 - 1 小时就会经历一次 Mongo::OperationTimeout 我的堆栈:

  • 导轨 3.1.3
  • Mongoid 3(git 边缘)
  • unicorn 4.1.1
  • 2 X MongoDB 2.0.2(应该正确设置 KeepAlive 默认设置)配置为 ReplicaSet
  • Ubuntu m1.large EC2

我已尝试将 EC2 上的 KeepAlive 设置为 300,如 http://www.mongodb.org/display/DOCS/Amazon+EC2 中所述但仍然没有帮助

我试过只使用一个主配置而不是 ReplicaSet,但这也没有帮助。

下面是mongoid.conf:

production:
  database: my-app-name
  op_timeout: 10
  read_secondary: true
  max_retries_on_connection_failure: 3
  identity_map_enabled: true
  allow_dynamic_fields: false
  hosts:
    - - ip-XXX.ec2.internal
      - 27017
    - - ip-XXX.ec2.internal
      - 27017

最佳答案

经过一些集体思考,以下是我们针对我们的情况得出的一些观点:

  • 我们使用 mongoid 3.0 和 op_timeout: 30(Mongoid 2.3 及以下版本没有启用 op_timeout),这实际上使 OperationTimeout float 。可能许多其他用户也遇到过这种情况,但实际上并没有在日志中得到这种情况,而只是卡住了 unicorn worker 。
  • 我们使用的是 Unicorn,它会提前生成进程并让它们等待,这与动态扩展的 Passenger 不同。由于我们目前只是处于测试模式,并没有真正的流量,许多 worker 可能变得空闲,并且他们的 mongo 连接变得陈旧。大多数人可能也没有做到这一点,但可能时不时地会遇到这种情况。
  • 这里 www.mongodb.org/display/DOCS/Troubleshooting#Troubleshooting-Socketerrorsinshardedclustersandreplicasets 中描述的 Linux KeepAlive 似乎没有帮助
  • 目前,我已经创建了一个虚拟 Rack 中间件来执行初始 mongo 查询并在需要时处理异常。这是代码 https://gist.github.com/1647879

关于mongodb - 每 20 分钟到 2 小时体验一次 Mongo::OperationTimeout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8913867/

相关文章:

javascript - Meteor 渲染来自嵌入式嵌套集合的数据

c# - CosmosDb - 写入操作导致错误。错误=16500

python - 在 Python 中删除多个 MongoDB 文档

ruby-on-rails - mongoid update_attributes 改变数据类型

ruby-on-rails - 使用mongoid使用mongodb在消息父级中嵌入消息回复

django - 使用 Django 和 AngularJs 在 Mongodb 中上传 Pdf 文件

node.js - Node 应用程序未连接到 mongodb 数据库

Ruby/rails : mongoid with mongo(gem); a bson conflict? 如何处理不同版本?

ruby-on-rails - Ruby On Rails 中的类列表

ruby-on-rails-4 - 未定义的方法 `attr_accessible' 与 Mongoid