2015-11-19 10 views
15

MODIFICA: Fondamentalmente sto cercando alcuni suggerimenti su come capire quali operazioni in background sono in esecuzione sulla mia istanza MongoDB e possibilmente ridurle/disabilitarle quando necessario in modo da non interferire con i test in esecuzione. Ho provato mongostat e mongotop ma non ho trovato nulla con loro che mi ha aiutato a capire quali operazioni in background sono in esecuzione e cosa sta iniziando. db.currentOp() restituisce costantemente un array vuoto quando viene eseguito prima di iniziare a eseguire i test.Monitoraggio MongoDB "operazioni in background"?

Eseguo regolarmente test durante lo sviluppo con il nodo (moka, cetriolo). Da ieri, circa il 25% del inizializzazione del server di tempo non riesce tenta di connettersi a MongoDB con il seguente errore:

**Unhandled rejection MongoError: exception: cannot perform operation: a background operation is currently running for collection** somecollection 
    at Function.MongoError.create (/somepath/node_modules/pow-mongodb-fixtures/node_modules/mongodb/node_modules/mongodb-core/lib/error.js:31:11) 
    at /somepath/node_modules/pow-mongodb-fixtures/node_modules/mongodb/node_modules/mongodb-core/lib/topologies/server.js:793:66 
    at bound (domain.js:254:14) 
    at runBound (domain.js:267:12) 
    at Callbacks.emit (.../node_modules/pow-mongodb-fixtures/node_modules/mongodb/node_modules/mongodb-core/lib/topologies/server.js:94:3) 
    at null.messageHandler (/somepath/node_modules/pow-mongodb-fixtures/node_modules/mongodb/node_modules/mongodb-core/lib/topologies/server.js:235:23) 
    at Socket.<anonymous> (/somepath/node_modules/pow-mongodb-fixtures/node_modules/mongodb/node_modules/mongodb-core/lib/connection/connection.js:294:20) 
    at Socket.emit (events.js:107:17) 
    at readableAddChunk (_stream_readable.js:163:16) 
    at Socket.Readable.push (_stream_readable.js:126:10) 
    at TCP.onread (net.js:538:20) 

Usiamo pow-mongodb-infissi per cancellare il db e riempirlo con alcuni dati di base prima di eseguire i test , che è dove sta succedendo. AFAIK nulla di importante è cambiato quando questo ha iniziato a succedere. Qualche idea in cui posso anche iniziare a cercare la fonte di questo errore?

+1

controllo in esecuzione processo in background utilizzando db.currentOp(). In caso di processo in background attivo, il client è configurato per inviare questo errore –

+0

Questo comando restituisce sempre una matrice vuota. Probabilmente prima di eseguirlo, l'operazione di background è terminata. Tuttavia, a volte ho bisogno di eseguire 3 o 4 volte per superare questo errore. – joniba

+0

Potresti essere sulla strada giusta con 'db.currentOp()' ma forse non utilizzarlo correttamente. Questo articolo va più in profondità; [Visualizza e uccide le operazioni attualmente in esecuzione in MongoDB] (https://masteringmean.com/lessons/104-Viewing-and-killing-currently-executing-operations-in-MongoDB) –

risposta

3

Il tuo amico in questo caso sarebbe:

db.currentOp(true) 

Specificando vero include operazioni su connessioni inattive e le operazioni di sistema.

vedere qui: https://docs.mongodb.org/manual/reference/method/db.currentOp/

+0

Um, leggi i commenti alla domanda? – joniba

+0

Ovviamente l'ho fatto, ma hai continuato a specificare db.currentOp() in esecuzione senza il parametro aggiuntivo che avrebbe potuto essere d'aiuto nel tuo caso. Ad ogni modo, molto contento di sapere che il tuo problema è stato risolto :) –

4

Beh, io non ho intenzione di segnare questa come la risposta, perché ero alla ricerca di un modo per monitorare ciò che sta accadendo e capire la questione attraverso mongo db. Tuttavia, ho capito il problema. Non è la soluzione più utile al mondo, ma è emerso che stavamo iniziando in modo asincrono il server, che eseguiva tutti gli schemi di mangusta e quindi controlla/ricreava tutti gli indici, e più o meno contemporaneamente stavo eseguendo il codice delle fixture per cancellare il mio collezioni.

In breve, non cercare di eliminare le raccolte durante la creazione di indici su di loro :)