javascript - tutorial - Node.js montón de memoria
node.js pdf español (16)
Pasos para arreglar:
-
Abra el símbolo del sistema y escriba
%appdata%
presione enter -
Navegue a la
%appdata%
> npm -
Abra o edite
ng.cmd
en su editor favorito -
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.
Tuve un problema similar al hacer la construcción angular AOT. Los siguientes comandos me ayudaron.
npm install -g increase-memory-limit
increase-memory-limit
Fuente: https://geeklearning.io/angular-aot-webpack-memory-trick/
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.