【问题标题】:Experiencing Mongo::OperationTimeout every 20mins-2 hours每 20 分钟到 2 小时体验一次 Mongo::OperationTimeout
【发布时间】:2012-02-13 09:25:30
【问题描述】:

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

  • Rails 3.1.3
  • Mongoid 3(git 边缘)
  • 独角兽 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:

生产: 数据库:我的应用程序名称 操作超时:10 read_secondary: 真 max_retries_on_connection_failure:3 identity_map_enabled:真 允许动态字段:假 主持人: - - ip-XXX.ec2.internal - 27017 - - ip-XXX.ec2.internal - 27017

【问题讨论】:

标签: mongodb mongoid


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-24
    • 2017-05-24
    • 1970-01-01
    • 2011-06-17
    • 1970-01-01
    • 1970-01-01
    • 2019-11-04
    • 1970-01-01
    相关资源
    最近更新 更多