visual tutorial studio servidor node lado español javascript node.js crash out-of-memory heap-memory

javascript - tutorial - Node.js montón de memoria



node.js pdf español (16)

Pasos para arreglar:

  1. Abra el símbolo del sistema y escriba %appdata% presione enter
  2. Navegue a la %appdata% > npm
  3. Abra o edite ng.cmd en su editor favorito
  4. Agregue --max_old_space_size=8192 al bloque IF y ELSE

Su archivo node.cmd ve así después del cambio:

@IF EXIST "%~dp0/node.exe" ( "%~dp0/node.exe" "--max_old_space_size=8192" "%~dp0/node_modules/@angular/cli/bin/ng" %* ) ELSE ( @SETLOCAL @SET PATHEXT=%PATHEXT:;.JS;=;% node "--max_old_space_size=8192" "%~dp0/node_modules/@angular/cli/bin/ng" %* )

Hoy ejecuté mi script para la indexación del sistema de archivos para actualizar el índice de archivos RAID y después de 4h se bloqueó con el siguiente error:

[md5:] 241613/241627 97.5% [md5:] 241614/241627 97.5% [md5:] 241625/241627 98.1% Creating missing list... (79570 files missing) Creating new files list... (241627 new files) <--- Last few GCs ---> 11629672 ms: Mark-sweep 1174.6 (1426.5) -> 1172.4 (1418.3) MB, 659.9 / 0 ms [allocation failure] [GC in old space requested]. 11630371 ms: Mark-sweep 1172.4 (1418.3) -> 1172.4 (1411.3) MB, 698.9 / 0 ms [allocation failure] [GC in old space requested]. 11631105 ms: Mark-sweep 1172.4 (1411.3) -> 1172.4 (1389.3) MB, 733.5 / 0 ms [last resort gc]. 11631778 ms: Mark-sweep 1172.4 (1389.3) -> 1172.4 (1368.3) MB, 673.6 / 0 ms [last resort gc]. <--- JS stacktrace ---> ==== JS stack trace ========================================= Security context: 0x3d1d329c9e59 <JS Object> 1: SparseJoinWithSeparatorJS(aka SparseJoinWithSeparatorJS) [native array.js:~84] [pc=0x3629ef689ad0] (this=0x3d1d32904189 <undefined>,w=0x2b690ce91071 <JS Array[241627]>,L=241627,M=0x3d1d329b4a11 <JS Function ConvertToString (SharedFunctionInfo 0x3d1d3294ef79)>,N=0x7c953bf4d49 <String[4]/: ,/n >) 2: Join(aka Join) [native array.js:143] [pc=0x3629ef616696] (this=0x3d1d32904189 <undefin... FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory 1: node::Abort() [/usr/bin/node] 2: 0xe2c5fc [/usr/bin/node] 3: v8::Utils::ReportApiFailure(char const*, char const*) [/usr/bin/node] 4: v8::internal::V8::FatalProcessOutOfMemory(char const*, bool) [/usr/bin/node] 5: v8::internal::Factory::NewRawTwoByteString(int, v8::internal::PretenureFlag) [/usr/bin/node] 6: v8::internal::Runtime_SparseJoinWithSeparator(int, v8::internal::Object**, v8::internal::Isolate*) [/usr/bin/node] 7: 0x3629ef50961b

El servidor está equipado con 16 gb de RAM y 24 gb de intercambio SSD. Dudo mucho que mi script supere los 36 gb de memoria. Al menos no debería

El script crea un índice de archivos almacenados como Matriz de objetos con metadatos de archivos (fechas de modificación, permisos, etc., sin grandes datos)

Aquí está el código completo del script: http://pastebin.com/mjaD76c3

Ya he experimentado problemas extraños de nodos en el pasado con este script que me obligó, por ejemplo. dividir el índice en varios archivos ya que el nodo fallaba cuando trabajaba en archivos tan grandes como String. ¿Hay alguna manera de mejorar la administración de memoria de nodejs con grandes conjuntos de datos?


En caso de que alguien se encuentre con esto en un entorno donde no puede establecer las propiedades del nodo directamente (en mi caso, una herramienta de compilación):

NODE_OPTIONS="--max-old-space-size=4096" node ...

Puede configurar las opciones de nodo utilizando una variable de entorno si no puede pasarlas en la línea de comando.


En caso de que pueda ayudar a las personas que tienen este problema al usar aplicaciones de nodejs que producen un registro pesado, un colega resolvió este problema conectando las salidas estándar a un archivo.


En mi caso, ejecuté npm install en la versión anterior del nodo, después de algún día actualicé la versión del nodo y la instalación de ram npm install para algunos módulos. Después de esto recibí este error. Para solucionar este problema, eliminé la carpeta node_module de cada proyecto y ejecuté npm install nuevamente.

Espero que esto pueda solucionar el problema.

Nota: Esto estaba sucediendo en mi máquina local y se solucionó solo en la máquina local.


Encontré este problema al intentar depurar con VSCode, así que solo quería agregar esto, así es como puede agregar el argumento a su configuración de depuración.

Puede agregarlo a la propiedad runtimeArgs de su configuración en launch.json .

Ver ejemplo a continuación.

{ "version": "0.2.0", "configurations": [{ "type": "node", "request": "launch", "name": "Launch Program", "program": "${workspaceRoot}//server.js" }, { "type": "node", "request": "launch", "name": "Launch Training Script", "program": "${workspaceRoot}//training-script.js", "runtimeArgs": [ "--max-old-space-size=4096" ] } ]}


Estaba luchando con esto incluso después de configurar --max-old-space-size.

Luego me di cuenta de la necesidad de poner opciones --max-old-space-size antes del script de karma.

También es mejor especificar ambas sintaxis: max-old-space-size y --max_old_space_size mi script para karma:

node --max-old-space-size=8192 --optimize-for-size --max-executable-size=8192 --max_old_space_size=8192 --optimize_for_size --max_executable_size=8192 node_modules/karma/bin/karma start --single-run --max_new_space_size=8192 --prod --aot

referencia https://github.com/angular/angular-cli/issues/1652


Estos son algunos valores de marca para agregar información adicional sobre cómo permitir más memoria cuando inicia su servidor de nodo.

1GB - 8GB

#increase to 1gb node --max-old-space-size=1024 index.js #increase to 2gb node --max-old-space-size=2048 index.js #increase to 3gb node --max-old-space-size=3072 index.js #increase to 4gb node --max-old-space-size=4096 index.js #increase to 5gb node --max-old-space-size=5120 index.js #increase to 6gb node --max-old-space-size=6144 index.js #increase to 7gb node --max-old-space-size=7168 index.js #increase to 8gb node --max-old-space-size=8192 index.js


He intentado 👍 el siguiente código y funciona bien✌.

  • abrir terminal desde el directorio raíz del proyecto
  • ejecute el cmd para establecer un nuevo tamaño.

    establecer NODE_OPTIONS = - max_old_space_size = 8172

O puede consultar el enlace para obtener más información https://github.com/nodejs/node/issues/10137#issuecomment-487255987


Nodo de actualización a la última versión. Estaba en el nodo 6.6 con este error y actualicé a 8.9.4 y el problema desapareció.


Recientemente me enfrenté a este mismo problema y me encontré con este hilo, pero mi problema fue con React App. A continuación, los cambios en el comando de inicio de nodo resolvieron mis problemas.

Sintaxis

node --max-old-space-size=<size> path-to/fileName.js

Ejemplo

node --max-old-space-size=16000 scripts/build.js

¿Por qué el tamaño es 16000 en max-old-space-size?

Básicamente, varía según la memoria asignada a ese subproceso y la configuración de su nodo.

¿Cómo verificar y dar el tamaño correcto?

Esto es básicamente permanecer en nuestro motor v8 . El siguiente código le ayuda a comprender el tamaño de almacenamiento dinámico de su motor de nodo local v8.

const v8 = require(''v8''); const totalHeapSize = v8.getHeapStatistics().total_available_size; const totalHeapSizeGb = (totalHeapSize / 1024 / 1024 / 1024).toFixed(2); console.log(''totalHeapSizeGb: '', totalHeapSizeGb);


Si desea aumentar el uso de memoria del nodo globalmente, no solo un script, puede exportar una variable de entorno, como esta:
export NODE_OPTIONS=--max_old_space_size=4096

Entonces no necesita jugar con archivos cuando ejecuta compilaciones como npm run build .


Si está intentando iniciar no el node sí, sino algún otro soft, por ejemplo webpack , puede usar la variable de entorno y el paquete cross-env :

$ cross-env NODE_OPTIONS=''--max-old-space-size=4096'' / webpack --progress --config build/webpack.config.dev.js


Si no recuerdo mal, hay un límite estándar estricto para el uso de memoria en V8 de alrededor de 1.7 GB, si no lo aumenta manualmente.

En uno de nuestros productos, seguimos esta solución en nuestro script de implementación:

node --max-old-space-size=4096 yourFile.js

También habría un nuevo comando de espacio, pero como leí aquí: a-tour-of-v8-garbage-collection el nuevo espacio solo recopila los datos a corto plazo recién creados y el espacio antiguo contiene todas las estructuras de datos referenciadas que deberían estar en Su caso la mejor opción.



es simple, simplemente aumente la memoria del montón de 1 a 8 GB para Windows Open Powershell o CMD en el directorio de su proyecto y escriba el comando a continuación, para Mac Open Terminal en ese directorio

node --max-old-space-size={size in MBs} index.js


fwiw, encontrar y arreglar un cerdo de memoria con algo como memwatch podría ayudar.