我似乎每隔 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/