Stop worrying about the potholes in the road and enjoy the journey

Como Monitorar o Uso de Memória em Sua Aplicação Node.js

Entender quanto de memória sua aplicação Node.js consome é essencial para otimizar o desempenho e prevenir vazamentos de memória. O Node.js fornece ferramentas integradas para verificar o uso de memória programaticamente, e também existem ferramentas externas para monitoramento em tempo real.

1. Usando process.memoryUsage()

O método process.memoryUsage() no Node.js fornece informações detalhadas sobre o consumo de memória do processo atual. Aqui está um exemplo básico:

console.log('Uso de memória:', process.memoryUsage());

Isso irá gerar um objeto com os seguintes campos:

  • rss: Resident Set Size – memória total usada pelo processo, incluindo código, dados e memória alocada.
  • heapTotal: Memória total alocada para o heap do JavaScript.
  • heapUsed: Memória atualmente usada por objetos JavaScript.
  • external: Memória usada por objetos C++ vinculados ao Node.js.

Um exemplo de saída:

{
  "rss": 33157120,
  "heapTotal": 7385088,
  "heapUsed": 4812560,
  "external": 8272
}

2. Formatando o Uso de Memória para Melhor Leitura

Para tornar a saída mais amigável ao usuário, você pode formatar os valores em megabytes:

function formatMemoryUsage(memory) {
    return {
        rss: `${(memory.rss / 1024 / 1024).toFixed(2)} MB`,
        heapTotal: `${(memory.heapTotal / 1024 / 1024).toFixed(2)} MB`,
        heapUsed: `${(memory.heapUsed / 1024 / 1024).toFixed(2)} MB`,
        external: `${(memory.external / 1024 / 1024).toFixed(2)} MB`
    };
}

console.log('Uso de memória:', formatMemoryUsage(process.memoryUsage()));

3. Monitoramento de Memória em Tempo Real

Se você quiser monitorar o uso de memória em tempo real, pode configurar um log periódico usando setInterval:

setInterval(() => {
    console.log('Uso de memória:', formatMemoryUsage(process.memoryUsage()));
}, 5000); // A cada 5 segundos

4. Monitorando o Uso de Memória Externamente

Para casos em que você deseja verificar o uso de memória a partir de outro terminal ou sem modificar seu código, aqui estão algumas opções:

4.1. Usando Comandos do Sistema

No Linux/Unix:

ps aux | grep node
top -p <PID>

No Windows:

tasklist | findstr node

Então, você pode monitorar o uso de memória com ferramentas como top, htop, ou o Gerenciador de Tarefas no Windows.

4.2. Usando a Biblioteca pidusage

O pacote pidusage é uma ferramenta conveniente para rastrear o uso de memória e CPU para qualquer processo Node.js. Instale-o com:

npm install pidusage

Aqui está um exemplo de uso:

import pidusage from 'pidusage';

setInterval(async () => {
    const stats = await pidusage(process.pid);
    console.log(`Memória: ${(stats.memory / 1024 / 1024).toFixed(2)} MB`);
}, 5000);

Conclusão

Para monitorar o uso de memória de forma eficaz:

  • Use process.memoryUsage() para obter informações integradas sobre o consumo de memória da sua aplicação.
  • Formate a saída para melhor legibilidade, se necessário.
  • Para monitoramento em tempo real, utilize logs periódicos ou ferramentas externas como pidusage, top, ou htop.

Essas técnicas podem ajudá-lo a manter suas aplicações Node.js otimizadas e prevenir que problemas de memória impactem o desempenho.

0