> ## Knowledge Base Index
> Fetch the complete knowledge base index at: https://help.squarecloud.app/sitemap.xml
> Use this file to discover available pages before exploring further.
> Pure-Markdown content can be obtained by appending a '.md' suffix to the content URLs listed in the sitemap (without the trailing slash).

# Fuga de memoria en Node.js: identificar y corregir

## Qué es una fuga de memoria (memory leak)

Una fuga de memoria ocurre cuando tu aplicación **asigna memoria y nunca la libera**. Con el tiempo, el consumo de RAM crece continuamente hasta que el proceso se bloquea o el sistema lo finaliza por falta de memoria. En Node.js esto es común cuando los objetos que deberían ser descartados continúan "atrapados" por referencias que nunca se eliminan.

## Síntomas

* El uso de RAM sube de forma constante y nunca vuelve a bajar.
* La aplicación se vuelve lenta con el paso de las horas.
* Caídas periódicas (crashes) seguidas de reinicios.
* Mensajes como `JavaScript heap out of memory`.

## Causas más comunes

* **Listeners de eventos no eliminados**: registrar `on(...)` repetidamente sin usar `removeListener`.
* **Closures y variables globales**: datos acumulados en variables que viven durante toda la ejecución.
* **Caché infinito**: guardar elementos en un objeto o Map sin limpiarlo nunca.
* **Timers**: `setInterval` que nunca recibe un `clearInterval`.

## Cómo identificarlo

**1. Monitorea el uso de memoria.** Realiza un seguimiento del consumo de RAM a lo largo del tiempo. Un gráfico que solo sube es el indicio principal.

**2. Toma un heap snapshot.** Ejecuta la aplicación con la flag de inspección `node --inspect tu-aplicacion.js`, abre `chrome://inspect` en el navegador, captura dos snapshots con algunos minutos de diferencia y compara qué creció.

**3. Usa process.memoryUsage().** Registra en los logs periódicamente `process.memoryUsage().heapUsed` para ver la tendencia.

## Cómo corregirlo

* Elimina siempre los listeners que ya no se vayan a utilizar.
* Define un límite para las cachés (ej.: LRU cache) y expira los elementos antiguos.
* Limpia los timers con `clearInterval` y `clearTimeout`.
* Evita acumular datos en variables de alcance global.

## Monitoreando la memoria en Square Cloud

En Square Cloud puedes seguir el consumo de RAM de tu aplicación en tiempo real desde el Dashboard. Si el uso supera el límite de tu plan, la plataforma te avisa; de este modo, resulta fácil identificar una fuga antes de que tumbe la aplicación. Combina el monitoreo con las buenas prácticas anteriores para mantener tu bot o API estables 24/7.