如何处理 rails/mongoid 中的出队连接超时?
How do I deal with dequeue connection timeouts in rails/mongoid?
我的堆栈:RoR4.2.6,Mongoid 5.0.1
我正在使用 apache 基准测试我的网站并不断遇到如下错误:
2016-03-24 22:15:36 +0000 pid=23187, severity=FATAL,
ActionView::Template::Error (Timed out attempting to dequeue connection after 1 sec.):
22: =link_to '/albums/' + mention.object.slug do
23: .small-12.medium-6.large-4.columns.left
24: .mention-box
25: %img.mention-thumb{src: mention.object.thumb_url}
26: %h5.mention-name
27: = mention.object.name
28: %br
app/models/mention.rb:13:in `object'
app/views/posts/_full_mention.html.haml:25:in `block in _app_views_posts__full_mention_html_haml___1744802549767261808_47000690052420'
仅供参考,这是在 mention.rb 中调用的行,只是一个简单的查找查询:
def object
Object.const_get(type).find(mention_id)
end
我的假设是,这意味着我遇到了 mongoDB 太多的请求,它无法跟上,但不完全确定如何解决这个问题。我应该为 mongoid 设置更高的队列超时吗?感谢任何建议!
有同样的问题,
通过在 mongoid.yml 生产配置中添加 wait_queue_timeout 属性解决:
production:
clients:
default:
uri: mongodb://xxx.com:27017/mongo
options:
connect_timeout: 15
wait_queue_timeout: 15
而不是调整 wait_queue_timeout
是为了:
The time to wait, in seconds, in the connection pool for a connection [..] [1]
我建议调整 min_pool_size
和 max_pool_size
。
The minimum/maximum number of connections in the connection pool [1]
因此您的 server/background 工作人员不必等待连接。
如果您运行您的应用程序使用多线程应用程序服务器 (Puma) 或在 Sidekiq 内部,您需要设置适当大小的连接池。
[1] https://docs.mongodb.com/ecosystem/tutorial/mongoid-installation/
我的堆栈:RoR4.2.6,Mongoid 5.0.1
我正在使用 apache 基准测试我的网站并不断遇到如下错误:
2016-03-24 22:15:36 +0000 pid=23187, severity=FATAL,
ActionView::Template::Error (Timed out attempting to dequeue connection after 1 sec.):
22: =link_to '/albums/' + mention.object.slug do
23: .small-12.medium-6.large-4.columns.left
24: .mention-box
25: %img.mention-thumb{src: mention.object.thumb_url}
26: %h5.mention-name
27: = mention.object.name
28: %br
app/models/mention.rb:13:in `object'
app/views/posts/_full_mention.html.haml:25:in `block in _app_views_posts__full_mention_html_haml___1744802549767261808_47000690052420'
仅供参考,这是在 mention.rb 中调用的行,只是一个简单的查找查询:
def object
Object.const_get(type).find(mention_id)
end
我的假设是,这意味着我遇到了 mongoDB 太多的请求,它无法跟上,但不完全确定如何解决这个问题。我应该为 mongoid 设置更高的队列超时吗?感谢任何建议!
有同样的问题, 通过在 mongoid.yml 生产配置中添加 wait_queue_timeout 属性解决:
production:
clients:
default:
uri: mongodb://xxx.com:27017/mongo
options:
connect_timeout: 15
wait_queue_timeout: 15
而不是调整 wait_queue_timeout
是为了:
The time to wait, in seconds, in the connection pool for a connection [..] [1]
我建议调整 min_pool_size
和 max_pool_size
。
The minimum/maximum number of connections in the connection pool [1]
因此您的 server/background 工作人员不必等待连接。
如果您运行您的应用程序使用多线程应用程序服务器 (Puma) 或在 Sidekiq 内部,您需要设置适当大小的连接池。
[1] https://docs.mongodb.com/ecosystem/tutorial/mongoid-installation/