Sto lavorando al backend del nodo cercando di ottimizzare una query molto pesante su mongodb via mangusta. Le dimensioni di ritorno previste sono considerevoli, ma per qualche motivo quando faccio la richiesta, il nodo inizia a consumare enormi quantità di memoria, ad esempio 200mb + per una singola grande richiesta.Modo per ridurre l'utilizzo della memoria da parte di mangusta quando si esegue la query
Considerando che la dimensione del reso è inferiore a 10 MB nella maggior parte dei casi, questo non sembra giusto. Rifiuta anche di lasciare andare la memoria dopo che è finita, so che probabilmente è solo il V8 GC a fare il suo comportamento predefinito, ma ciò che mi preoccupa è l'enorme quantità di memoria che viene consumata per una singola richiesta find().
L'ho isolato attraverso il test alla chiamata find(). Una volta eseguita la chiamata, esegue alcune operazioni di post-elaborazione, quindi invia i dati a un callback, il tutto in una funzione anonima. Ho provato a utilizzare il querystream al posto di model.find(), ma non mostra miglioramenti reali.
Guardarsi intorno non ha prodotto alcuna risposta, quindi chiederò, esiste un modo noto per ridurre, controllare o ottimizzare l'utilizzo della memoria da parte di mangusta? Qualcuno sa perché viene utilizzata così tanta memoria in eccesso per una singola chiamata?
EDIT
Secondo Johnny e Blakes suggerimenti, utilizzando miscela magra() con lo streaming, e utilizzando pausa e riprendere hanno migliorato l'utilizzo della memoria runtime e immensamente. Grazie!
Quando si elabora l'output '.stream()', si chiama mai '.pause()'? O in effetti quali azioni stai eseguendo nel processore di eventi "dati" e ci sono altri strumenti di controllo delle code lì? –
Non faccio nessuna pausa o riprendo le chiamate. Nei dati, tutto ciò che sto facendo è accodare i documenti su una matrice per essere inviati attraverso la richiamata alla chiusura. – Javeed