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

Cómo monitorear el uso de memoria en tu aplicación Node.js

Comprender cuánta memoria consume tu aplicación Node.js es esencial para optimizar el rendimiento y prevenir fugas de memoria. Node.js proporciona herramientas integradas para verificar el uso de memoria programáticamente, y también hay herramientas externas para el monitoreo en tiempo real.

1. Usando process.memoryUsage()

El método process.memoryUsage() en Node.js proporciona información detallada sobre el consumo de memoria del proceso actual. Aquí hay un ejemplo básico:

console.log('Uso de memoria:', process.memoryUsage());

Esto producirá un objeto con los siguientes campos:

  • rss: Resident Set Size – memoria total utilizada por el proceso, incluyendo código, datos y memoria asignada.
  • heapTotal: Memoria total asignada para el heap de JavaScript.
  • heapUsed: Memoria actualmente utilizada por objetos de JavaScript.
  • external: Memoria utilizada por objetos C++ vinculados a Node.js.

Un ejemplo de salida:

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

2. Formatear el Uso de Memoria para Mayor Legibilidad

Para hacer la salida más amigable para el usuario, puedes formatear los valores en 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 memoria:', formatMemoryUsage(process.memoryUsage()));

3. Monitoreo de Memoria en Tiempo Real

Si deseas monitorear el uso de memoria en tiempo real, puedes configurar un registro periódico usando setInterval:

setInterval(() => {
    console.log('Uso de memoria:', formatMemoryUsage(process.memoryUsage()));
}, 5000); // Cada 5 segundos

4. Monitoreo Externo del Uso de Memoria

Para casos donde quieras verificar el uso de memoria desde otra terminal o sin modificar tu código, aquí hay algunas opciones:

4.1. Usando Comandos del Sistema

En Linux/Unix:

ps aux | grep node
top -p <PID>

En Windows:

tasklist | findstr node

Luego, puedes monitorear el uso de memoria con herramientas como top, htop, o el Administrador de Tareas en Windows.

4.2. Usando la Librería pidusage

El paquete pidusage es una herramienta conveniente para rastrear el uso de memoria y CPU para cualquier proceso de Node.js. Instálalo con:

npm install pidusage

Aquí hay un ejemplo de uso:

import pidusage from 'pidusage';

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

Conclusión

Para monitorear el uso de memoria efectivamente:

  • Usa process.memoryUsage() para obtener información integrada sobre el consumo de memoria de tu aplicación.
  • Formatea la salida para una mejor legibilidad si es necesario.
  • Para monitoreo en tiempo real, aprovecha el registro periódico o herramientas externas como pidusage, top, o htop.

Estas técnicas pueden ayudarte a mantener tus aplicaciones Node.js optimizadas y prevenir que los problemas de memoria afecten el rendimiento.

0