JavaScript sigue siendo uno de los lenguajes de programación más utilizados debido a su versatilidad. Para ejecutar JavaScript fuera de un entorno de navegador, los desarrolladores deben instalar Node.js, un entorno de tiempo de ejecución multiplataforma.
El error de montón de JavaScript sin memoria es común cuando se ejecuta un proyecto JavaScript Node.js.
El problema de la pila de JavaScript sin memoria es un error que ocurre cuando la memoria predeterminada asignada por el sistema informático no es suficiente para ejecutar un gran proyecto.
Si encuentra el error de montón sin memoria, su programa se bloqueará y mostrará esta salida;
FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory
Or
Fatal error: invalid table size allocation failed - javascript heap out of memory
Causes of JavaScript heap out of memory error
- Presencia de grandes estructuras de datos: Trabajar con estructuras de datos de gran tamaño, como matrices o arreglos, puede consumir mucho espacio y, finalmente, provocar un error de memoria insuficiente.
Este es un ejemplo de una gran estructura de datos con mil millones de elementos;
let array = [];
for (let i = 0; i < 1000000000; i++) {
array.push(i);
}
- Mala gestión de la memoria: A medida que crece su aplicación, debe dejar ir algunos de los objetos que ya no necesita.
Este es un ejemplo de una función que conduce a una fuga de memoria;
let array = [];
setInterval(function() {
array.push(new Array(1000000).join("x"));
}, 1000);
- Bucles infinitos: Dicho código se ejecuta para siempre ya que nunca se alcanza una condición de terminación.
Este es un ejemplo de un bucle infinito que se ejecutará para siempre;
while (true) {
console.log(1);
}
Los bucles infinitos pueden provocar este error, ya que utiliza la memoria bastante rápido.
- Funciones recursivas: Una función recursiva es una función que se llama a sí misma directa o indirectamente para repetir un determinado conjunto de instrucciones hasta que se cumplan determinadas condiciones. Si estas funciones están bien diseñadas, es probable que conduzcan a errores de memoria y, eventualmente, a un montón de errores de memoria.
- Presencia de muchos objetos en una pieza de código: Si su código tiene muchos objetos grandes, la memoria utilizada por esos objetos en conjunto puede provocar una sobrecarga.
Fix JS heap out of memory error
Este error puede ocurrir en Windows, macOS y sistemas operativos basados en Linux como Ubuntu. Afortunadamente, el error se puede reparar, independientemente de su sistema operativo.
#1. Corrección del error de falta de memoria en el montón de JavaScript en el sistema operativo Windows
Paso 1: Haga clic en el menú de inicio y busque Advanced System Settings
.
Paso 2: Clickea en el Environment Variables
en la parte inferior izquierda del cuadro de diálogo.

Paso 3: Haga clic New
en cualquiera User variables
or System variables
. La primera opción aplica los cambios a la cuenta de usuario actual. Sin embargo, la segunda opción aplica los cambios a todo el sistema.

Paso 4: Se mostrarán dos opciones; en variable name
, introduzca NODE_OPTIONS
and on Variable value
, introduzca --max-old-space-size=4096
. En este paso, el 4096
figure asignará 4 GB de memoria virtual a Node.js. Puede asignar más, como 8 GB, configurando el valor como –max-old-space-size=8192.

Paso 5: Haga clic ok
, apply
y finalmente, ok
Para guardar los cambios.
También puede usar el terminal de Windows PowerShell para resolver el error. Abra la terminal en su sistema operativo Windows e ingrese el siguiente comando;
env:NODE_OPTIONS="--max-old-space-size=4096"

También puede resolver el error temporalmente ejecutando este comando antes de ejecutar su aplicación;
set NODE_OPTIONS=--max-old-space-size=4096
#2. Arreglando el montón de JavaScript sin error de memoria en Linux
- Paso 1: Identificar la fuente del error. Verifique los registros de la consola o la salida para determinar las líneas de código/archivo que causan el error.
- Paso 2: Exporte una variable de entorno que especifique la memoria virtual que ha asignado a Node.js. Utilice este comando;
export NODE_OPTIONS=--max-old-space-size=4096

Estos pasos asignarán 4 GB de memoria virtual a Node.js. Si el error persiste, puede aumentar el tamaño de la memoria duplicándolo.
Por ejemplo, si desea asignar 8 GB como memoria virtual, puede ejecutar este comando;
export NODE_OPTIONS=--max-old-space-size=8192
#3. Arreglando el montón de JavaScript sin error de memoria en macOS
Puede resolver el error de falta de memoria del montón de JavaScript en macOS utilizando un enfoque similar al de Linux. Sigue estos pasos;
- Paso 1: Identifique la fuente del error revisando los registros de la consola o la salida para determinar las líneas de código/archivo que causan el error.
- Paso 2: Exporte una variable de entorno que especifique la memoria virtual que ha asignado a Node.js. Utilice este comando;
export NODE_OPTIONS=--max-old-space-size=4096
Estos pasos asignarán 4 GB de memoria virtual a Node.js. Si el error persiste, puede aumentar el tamaño de la memoria duplicándolo.
Por ejemplo, si desea asignar 8 GB como memoria virtual, puede ejecutar este comando;
export NODE_OPTIONS=--max-old-space-size=8192
Aumento de la memoria durante la instalación de NPM
Las soluciones que hemos ofrecido hasta ahora se adaptan a los errores que ocurren cuando ejecuta una aplicación Node.js. Sin embargo, puede asignar memoria virtual para resolver el error de falta de memoria cuando instala paquetes de JavaScript. Utilice este comando;
node --max-old-space-size=4096 (which npm) install
Nota:: Puede seguir aumentando la asignación de memoria virtual en 1 GB, 2 GB, 3 GB o 4 GB. Debe especificar el tamaño de la memoria en MB. Sin embargo, no asigne toda la memoria de la máquina a Node.js, ya que esto puede hacer que su programa se bloquee. Como buena práctica, si su máquina tiene 16 GB, puede asignar hasta 8 GB a Node.js.
Prevent JavaScript the heap out of memory error
Hasta ahora hemos discutido cómo corregir el error de falta de memoria del montón de JavaScript cuando ocurre. Afortunadamente, también puede tener medidas para evitar que ocurra este error mientras ejecuta el código JavaScript. Estos son algunos de los mejores enfoques:
#1. Divida los datos en pequeños fragmentos
Es posible que tenga un programa Node.js que importe grandes conjuntos de datos desde archivos CSV grandes a través del ETL: Extraer – Transformar – Cargar proceso. Es posible que su aplicación siempre se bloquee cuando intenta importar los datos. Si está trabajando con MongoDB, puede resolver el error al tener una instrucción de línea de comando como;
split -l 1000000 users.csv
Este comando le indica a Node.js que divida un archivo llamado usuarios en varios archivos con 1000000 usuarios cada uno. El -l flag
especifica que el archivo debe dividirse en función del número de líneas de código.
#2. Supervisar el uso de la memoria
Puede usar un generador de perfiles de memoria para detectar fugas de memoria en su código. Puede combinar la memoria incorporada de Node.js y ChromeDevTools para lograrlo. Los dos pueden detectar problemas en su código y solucionarlos.
También puede usar herramientas externas como Datadog, New Relic y AppDynamics para monitorear el rendimiento de su aplicación y tomar las medidas necesarias. También puede verificar el uso de memoria en su aplicación Node.js a través del process.memoryUsage()
método.
#3. Evitando pérdidas de memoria
Las fugas de memoria ocurren cuando su aplicación Node.js conserva referencias a objetos que ya no necesita. Si dichos objetos no se recolectan como elementos no utilizados, se acumulará el uso de la memoria con el tiempo.
Hay varios enfoques para evitar fugas de memoria, como evitar variables globales en su código, evitar bloquear operaciones de E/S y usar let
y const
palabras clave al declarar sus variables en lugar de var
.
#4. Procesos de desove
Si está ejecutando Node.js en una máquina con memoria limitada, como Frambuesa Pi, es probable que se encuentre con un montón de errores de memoria. Puede tener un proceso maestro y otros se agrupan como trabajadores. Tan pronto como el proceso maestro detecte que el sistema se está quedando sin memoria, matará ese proceso y asignará la tarea a otro que no esté sobrecargado.
#5. Actualizar hardware
Si aumentar la asignación de memoria y llevar a cabo los procesos enumerados para evitar el error de almacenamiento en memoria no resuelve sus problemas, entonces puede considerar actualizar su hardware. Node.js puede ejecutarse en RAM de tan solo 512 MB. Sin embargo, su aplicación exigirá más RAM a medida que crezca.
Por otro lado, aumentar la cantidad de CPU también puede mejorar la asignación de memoria. Idealmente, 2 o más CPU permitirán que su aplicación use subprocesos de trabajo para tareas intensivas de CPU, como criptografía y procesamiento de imágenes.
FAQs
Este error puede deberse a varias razones;
1. Fugas de memoria
2. Bucles infinitos
3. Presencia de muchos objetos en un proyecto
4. Presencia de grandes estructuras de datos
Sí. Puede resolver el error a través de;
1. Asignar más memoria virtual a Node.js
2. Eliminar pérdidas de memoria
3. Optimizando tu código
4. Actualizar su hardware
React es una de las bibliotecas de JavaScript más populares. Localice el archivo package.json en el directorio raíz y estas líneas en la sección de scripts;
"scripts": {
"start": "react-scripts --max_old_space_size=4096 start",
"build": "react-scripts --max_old_space_size=4096 build",
"test": "react-scripts test",
"eject": "react-scripts eject"
}
Resumen
La mayoría de los desarrolladores están acostumbrados a errores y errores de código, no errores de tiempo de ejecución, mientras ejecutan sus programas Node.js. Por suerte, no tienes que preocuparte, ya que el error de montón sin memoria se puede arreglar. Hemos definido qué es el error de falta de memoria en el montón de JavaScript, explicamos cómo resolverlo y cómo evitarlo en su próximo proyecto de Node.js.
A continuación, también puede leer cómo evitar algunas Errores de JavaScript.