Middle+
Como lida com fugas de memória, se ocorrerem?
sobes.tech IA
Resposta da IA
Para detectar e corrigir fugas de memória, utilizo os seguintes métodos:
- Monitorização: Acompanho regularmente o consumo de memória usando ferramentas integradas do Node.js, como
--expose-gc,process.memoryUsage(), ou ferramentas externas como PM2 ou Prometheus/Grafana. - Ferramentas de profiling:
- Instantâneas do heap: Tiro "instantâneas do heap" em diferentes momentos usando Chrome DevTools (ou qualquer outro depurador que suporte o protocolo V8) e comparo-as para identificar objetos que crescem com o tempo e não deveriam.
// Exemplo de uso de heapdump para criar uma instantânea do heap const heapdump = require('heapdump'); // ... seu código ... // Criar uma instantânea do heap heapdump.writeSnapshot((err, filename) => { if (err) console.error(err); else console.log('Instantânea do heap guardada em:', filename); });- Profiling de CPU: Às vezes, fugas não estão diretamente relacionadas com a memória, mas com ciclos infinitos ou uso excessivo de CPU, o que pode indiretamente causar problemas de memória.
- Análise do código: Reviso manualmente o código em busca de causas comuns de fugas:
- Manipuladores de eventos não removidos.
// Exemplo de fuga: manipulador de evento não removido const EventEmitter = require('events'); const emitter = new EventEmitter(); function handler() { /* ... */ } emitter.on('myEvent', handler); // Se o emissor continuar a existir e a referência ao manipulador se perder // ou o objeto ao qual está ligado precisar ser destruído, // o manipulador irá mantê-lo na memória. // Correto: // emitter.off('myEvent', handler);- Temporizadores não limpos (
setInterval,setTimeout). - Closures que acidentalmente mantêm referências a objetos grandes.
- Variáveis globais que não são limpas.
- Caches que crescem indefinidamente sem mecanismo de expulsão.
- Promessas ou callbacks esquecidos que mantêm o contexto na memória.
- Testes automatizados: Escrevo testes que simulam o funcionamento a longo prazo da aplicação e verificam a estabilidade do consumo de memória.
- Revisões de código: Peço aos colegas que analisem o código em busca de potenciais fugas.