Hoy he ejecutado mi script para la indexación del sistema de archivos para refrescar el índice de los archivos RAID y después de 4 horas 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 16gb de RAM y 24gb de SSD de intercambio. Dudo mucho que mi script haya superado los 36gb de memoria. Al menos no debería
El script crea un índice de archivos almacenados como Array de Objetos con metadatos de archivos (fechas de modificación, permisos, etc, no big data)
Aquí's el código completo del script: http://pastebin.com/mjaD76c3
Ya he experimentado extraños problemas de node en el pasado con este script, lo que me obligó, por ejemplo, a dividir el índice en múltiples archivos, ya que node fallaba cuando trabajaba con archivos tan grandes como String. ¿Hay alguna forma de mejorar la gestión de la memoria de nodejs con conjuntos de datos enormes?
Si no recuerdo mal, hay un estricto límite estándar para el uso de la memoria en V8 de alrededor de 1,7 GB, si no se aumenta manualmente.
En uno de nuestros productos seguimos esta solución en nuestro script de despliegue:
node --max-old-space-size=4096 yourFile.js
También habría un comando de nuevo espacio pero según leo aquí: a-tour-of-v8-garbage-collection el nuevo espacio sólo recoge los datos a corto plazo recién creados y el antiguo espacio contiene todas las estructuras de datos referenciadas, lo que debería ser en tu caso la mejor opción.
Me encontré con este problema al tratar de depurar con VSCode, así que sólo quería añadir esto es cómo se puede añadir el argumento a su configuración de depuración.
Puedes añadirlo a la propiedad runtimeArgs
de tu configuración en launch.json
.
Vea el ejemplo de abajo.
{
"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"
]
}
]}
He tenido problemas con esto incluso después de establecer --max-old-space-size.
Entonces me di cuenta de la necesidad de poner opciones --max-old-space-size antes de la secuencia de comandos de karma.
También es mejor especificar ambas sintaxis --max-old-space-size y --max_old_space_size en 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