2016-03-24 7 views
5

mio stack: RoR4.2.6, Mongoid 5.0.1Come faccio a gestire i timeout della connessione di dequeue in rail/mongoid?

Sto analisi comparativa mio sito utilizzando benchmark apache e mantenere gli errori che colpiscono come la seguente:

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' 

e appena per riferimento, questa è la linea che è sempre chiamato a mention.rb, basta una semplice query ritrovamento:

def object 
    Object.const_get(type).find(mention_id) 
    end 

la mia ipotesi è che questo significa che sto colpendo MongoDB con troppe richieste e non può tenere il passo, ma non del tutto sicuro di come risolvilo. Dovrei semplicemente impostare un timeout di coda più alto per mongoid? Apprezzo qualsiasi consiglio!

risposta

8

Aveva stesso problema, risolto aggiungendo attributo wait_queue_timeout in mongoid.yml config produzione:

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

sì! alla fine ho risolto anche io questo modo. Comunque grazie per la risposta! –

5

Invece tweaking wait_queue_timeout che è per:

Il tempo di attesa, in secondi, nel pool di connessione per una connessione [..] [1]

vorrei suggerire tweaking min_pool_size e max_pool_size.

Il minimo/massimo numero di connessioni nel pool di connessioni [1]

in modo che il lavoro del server/sfondo non deve aspettare per una connessione.

Se si esegue l'applicazione utilizzando il server di applicazioni multi-thread (Puma) o Sidekiq, è necessario impostare il pool di connessione con le dimensioni appropriate.

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

Problemi correlati