MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Excluindo grandes objetos Javascript quando o processo está ficando sem memória


delete em javascript NÃO é usado para deletar variáveis ​​ou liberar memória. É usado SOMENTE para remover uma propriedade de um objeto. Você pode encontrar este artigo no delete operador uma boa leitura.

Você pode remover uma referência aos dados contidos em uma variável configurando a variável para algo como null . Se não houver outras referências a esses dados, isso os tornará elegível para coleta de lixo. Se houver outras referências a esse objeto, ele não será apagado da memória até que não haja mais referências a ele (por exemplo, não há como seu código acessá-lo).

Quanto ao que está causando o acúmulo de memória, há várias possibilidades e não podemos ver o suficiente do seu código para saber quais referências podem ser mantidas que impediriam o GC de liberar coisas.

Se este for um processo único e de longa execução sem interrupções na execução, talvez você também precise executar manualmente o coletor de lixo para garantir que ele tenha a chance de limpar as coisas que você lançou.

Aqui estão alguns artigos sobre como rastrear seu uso de memória no 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/ .