我的堆栈: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'
仅供参考,这是在提及.rb中调用的行,只是一个简单的查找查询:
def object
Object.const_get(type).find(mention_id)
end
我的假设是,这意味着我用太多的请求来攻击mongoDB并且它无法跟上,但不能完全确定如何解决这个问题。我应该为mongoid设置更高的队列超时吗?感谢任何建议!
答案 0 :(得分:9)
有同样的问题, 通过在mongoid.yml生产配置中添加wait_queue_timeout属性来解决:
production:
clients:
default:
uri: mongodb://xxx.com:27017/mongo
options:
connect_timeout: 15
wait_queue_timeout: 15
答案 1 :(得分:6)
而不是调整wait_queue_timeout
用于:
连接池[...] [1]
中等待的时间(以秒为单位)
我建议调整min_pool_size
和max_pool_size
。
连接池[1]
中的最小/最大连接数
所以你的服务器/后台工作者不必等待连接。
如果使用多线程应用程序服务器(Puma)或Sidekiq运行应用程序,则需要设置适当大小的连接池。
[1] https://docs.mongodb.com/ecosystem/tutorial/mongoid-installation/