javascript - img - Nodos sin memoria
title html (3)
Me encontré con un tema curioso hoy. Esta puede ser una respuesta fácil para otros, pero me ha dejado perplejo. ¿Por qué el siguiente código causa un error de memoria?
var cur = 167772160;
var bcast = 184549375;
var addresses = [];
while (cur <= bcast){
cur += 1;
addresses.push(cur);
}
addresses.length
addresses // memory goes from a few megs to over a gig in seconds when trying to print this
Me sale uno de estos dos errores ... el primero cuando ejecuto este código en el intérprete del nodo y el último cuando lo ejecuto a través de nodeunit:
ERROR FATAL: CALL_AND_RETRY_2 Fallo en la asignación: proceso fuera de la memoria
ERROR FATAL: Fallo en la asignación de JS: proceso sin memoria
No obtengo un error de asignación de memoria cuando ejecuto su script. ¿Cuánta RAM hay en tu sistema?
Editar Ok con las notas actualizadas del autor, puedo replicarlo.
Nodo está tratando de convertir toda su matriz a una cadena. La matriz tiene 16777216 elementos de longitud. Cada elemento contiene un número de al menos 9 dígitos de largo. Convertir eso a una cadena de 150,994,994 caracteres de longitud. Es solo una gran operación que está excediendo las capacidades de memoria del nodo.
Puede aumentar los límites predeterminados pasando --max-old-space-size=<value>
que está en MB.
El ejemplo permitirá que el montón de nodos utilice hasta 4 GB (4096 megabytes ) de memoria:
node --max-old-space-size=4096 app
Sucede cuando intento acceder a la matriz. Pero conseguir la longitud no lo hace.
> var cur = 167772160;
> var bcast = 184549375;
> var addresses = [];
> while (cur <= bcast){
... cur += 1;
... addresses.push(cur);
... }
16777216
> addresses.length
16777216
> addresses
FATAL ERROR: CALL_AND_RETRY_2 Allocation failed - process out of memory
Aquí hay otra pregunta de SO, límite de memoria en Node.js (y Chrome V8) que se relaciona con el problema con el uso de la memoria.