MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Eliminazione di oggetti Javascript di grandi dimensioni quando il processo sta esaurendo la memoria

delete in javascript NON viene utilizzato per eliminare variabili o liberare memoria. Viene utilizzato SOLO per rimuovere una proprietà da un oggetto. Puoi trovare questo articolo su delete operatore una buona lettura.

Puoi rimuovere un riferimento ai dati contenuti in una variabile impostando la variabile su qualcosa come null . Se non ci sono altri riferimenti a quei dati, ciò li renderà idonei per la raccolta dei rifiuti. Se ci sono altri riferimenti a quell'oggetto, non verrà cancellato dalla memoria fino a quando non ci saranno più riferimenti ad esso (ad esempio, non c'è modo per il tuo codice di raggiungerlo).

Per quanto riguarda ciò che sta causando l'accumulo di memoria, ci sono una serie di possibilità e non riusciamo a vedere abbastanza del tuo codice per sapere quali riferimenti potrebbero essere trattenuti per impedire al GC di liberare cose.

Se si tratta di un singolo processo di lunga durata senza interruzioni nell'esecuzione, potresti anche dover eseguire manualmente il Garbage Collector per assicurarti che abbia la possibilità di ripulire gli elementi che hai rilasciato.

Ecco un paio di articoli su come rintracciare l'utilizzo della memoria in node.js:http://dtrace.org/blogs/bmc/2012/05/05/debugging-node-js-memory-leaks/ e https://hacks.mozilla.org/2012/11/tracking-down-memory-leaks-in-node-js-a-node-js-holiday-season/ .