2016-03-24 8 views
5

マイスタック: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のキュータイムアウトを高く設定するだけですか?アドバイスをよろしく!

答えて

8

は、mongoid.yml生産の設定でwait_queue_timeout属性を追加することによって解決 を同じ問題を抱えていた:

production: 
    clients: 
    default: 
    uri: mongodb://xxx.com:27017/mongo 
    options: 
     connect_timeout: 15 
     wait_queue_timeout: 15 
+4

yup!私は結局それを自分でも解決しました。しかし、応答のためにありがとう! –

5

代わりのためであるwait_queue_timeoutを微調整の:

秒で、待機する時間を、接続用の接続プール内[..] [1]

0123を調整することをお勧めしますおよびmax_pool_size

接続プール内の接続の最小/最大数[1]

ので、あなたのサーバー/バックグラウンドワーカーは、接続を待つ必要はありません。

マルチスレッドアプリケーションサーバー(Puma)またはSidekiqを使用してアプリケーションを実行している場合は、適切なサイズの接続プールを設定する必要があります。

[1] https://docs.mongodb.com/ecosystem/tutorial/mongoid-installation/

関連する問題