node.js - increase - ng build max old space size
ERROR FATAL: CALL_AND_RETRY_LAST Error de asignaciĆ³n-proceso sin memoria (16)
La versión del nodo es
v0.11.13
El uso de memoria durante el bloqueo según
sudo top
no aumenta más del
3%
Código que reproduce este error:
var request = require(''request'')
var nodedump = require(''nodedump'')
request.get("http://pubapi.cryptsy.com/api.php?method=marketdatav2",function(err,res)
{
var data
console.log( "Data received." );
data = JSON.parse(res.body)
console.log( "Data parsed." );
data = nodedump.dump(data)
console.log( "Data dumped." );
console.log( data )
})
Para verificar si es un problema de tamaño de pila de recursión, he ejecutado el siguiente código con el parámetro --stack-size = 60000
var depth = 0;
(function recurse() {
// log at every 500 calls
(++depth % 500) || console.log(depth);
recurse();
})();
y tengo
264500
Segmentation fault
Luego ejecuté el código que me da ERROR FATAL: CALL_AND_RETRY_LAST Error de asignación: proceso sin memoria con el mismo parámetro --stack-size = 60000 y no tengo
Segmentation fault
.
Entonces concluyo que
CALL_AND_RETRY_LAST
no tiene nada en común con el tamaño de la pila de recursión.
¿Cómo podría resolver este problema? Creo que hay suficiente memoria libre en mi computadora para terminar esta tarea con éxito.
Hay preguntas similares en stackoverflow, pero ninguna de estas preguntas trata sobre
CALL_AND_RETRY_LAST
, por eso creé una pregunta por separado.
Cualquiera que reciba este error con las canalizaciones de compilación de Azure, intente el siguiente paso para cambiar la variable de entorno del agente de compilación
Agregue una
Azure build pipeline task
->
Azure powershell script:Inlinescript
antes de compilar con la siguiente configuración
- task: AzurePowerShell@3
displayName: ''Azure PowerShell script: InlineScript''
inputs:
azureSubscription: ''NYCSCA Azure Dev/Test (ea91a274-55c6-461c-a11d-758ef02c2698)''
ScriptType: InlineScript
Inline: ''[Environment]::SetEnvironmentVariable("NODE_OPTIONS", "--max_old_space_size=16384", "Machine")''
FailOnStandardError: true
azurePowerShellVersion: LatestVersion
Descubrí que
max_new_space_size
no es una opción en el nodo 4.1.1 y
max_old_space_size
solo no resolvió mi problema.
Estoy agregando lo siguiente a mi shebang y la combinación de estos parece funcionar:
#!/usr/bin/env node --max_old_space_size=4096 --optimize_for_size --max_executable_size=4096 --stack_size=4096
[EDITAR]: 4096 === 4 GB de memoria, si su dispositivo tiene poca memoria, puede elegir una cantidad menor.
[ACTUALIZACIÓN]: también descubrí este error al ejecutar Grunt, que anteriormente se ejecutaba así:
./node_modules/.bin/grunt
Después de actualizar el comando a lo siguiente, dejó de tener errores de memoria:
node --max_old_space_size=2048 ./node_modules/.bin/grunt
El módulo de
increase-memory-limit
ha quedado en desuso ahora.
A partir de
Node.js v8.0
enviado en agosto de 2017, ahora podemos usar la variable env
NODE_OPTIONS
para establecer globalmente
max_old_space_size
.
export NODE_OPTIONS=--max_old_space_size=4096
URL de referencia: https://github.com/endel/increase-memory-limit
En una máquina Windows, ejecute el siguiente comando
establecer NODE_OPTIONS = - max_old_space_size = 4096
Estaba enfrentando este problema en iónico y probé muchas soluciones, pero lo resolví ejecutando esto.
Para MAC: nodo --max-old-space-size = 4096 / usr / local / bin / ionic cordova build android --prod
Para Windows: nodo --max-old-space-size = 4096 / Users / {your user} / AppData / Roaming / npm / node_modules / ionic / bin / ionic cordova build windows --prod
Estaba viendo este problema cuando estaba creando un paquete para reaccionar nativo. Cosas que probé y no funcionó:
-
Incrementando el
node --max_old_space_size
, interesantemente, esto funcionó localmente para mí pero falló en jenkins y todavía no estoy seguro de qué sucede con jenkins - Algunos lugares mencionaron degradar la versión del nodo a 6.9.1 y eso tampoco funcionó para mí. Solo me gustaría poner esto aquí, ya que podría funcionar para usted.
Lo que sí funcionó para mí: estaba importando un archivo realmente grande en el código.
La forma en que lo resolví fue incluyéndolo en la lista de
.babelrc
en
.babelrc
algo como esto:
{
"presets": ["react-native"],
"plugins": ["transform-inline-environment-variables"],
"ignore": ["*.json","filepathToIgnore.ext"]
}
Era un archivo
.js
que realmente no necesitaba transpilarse y agregarlo a la lista de ignorados sí ayudó.
Este error ocurre cuando la memoria requerida asignada para la ejecución es menor que la memoria requerida para ejecutar el proceso. De forma predeterminada, el tamaño de la memoria del nodo es de 512 mb para aumentar esto, debe escribir el siguiente comando:
node --max-old-space-size= <NewSize> <fileName>
Mi solución de trabajo es:
-
Instalar
cross-env
npm install --save-dev cross-env
onpm install -g cross-env
. -
El archivo
package.json
agrega un nuevo script de compilación
p.ej
... "build:prod:ios": "cross-env NODE_OPTIONS=''--max-old-space-size=8192'' ionic cordova build ios --prod --release" ...
-
Use ese comando para construir la próxima vez.
npm run build:prod:ios
-
Problema resuelto.
Para resolver este problema, debe ejecutar su aplicación aumentando el límite de memoria mediante la opción
--max_old_space_size
.
Por defecto, el límite de memoria de Node.js es de 512 mb.
node --max_old_space_size=2000 server.js
Perdí algunos días con este problema ... hasta que descubrí que en algún archivo estaba importando un archivo estático, un archivo integrado. Hace que la construcción nunca termine. Algo como:
import PropTypes from "../static/build/prop-types";
La fijación a la fuente real resolvió todo el problema.
Compartiendo mi solución. :)
Si github/v8 un vistazo a la fuente: github/v8 , parece que intentas reservar un objeto muy grande. Según mi experiencia, sucede si intentas analizar un gran objeto JSON, pero cuando trato de analizar tu salida con JSON y node0.11.13, simplemente funciona bien.
No necesita más
--stack-size
, necesita más memoria:
--max_new_space_size
y / o
--max_old_space_size
.
La única pista que puedo darte es probar otro analizador JSON y / o tratar de cambiar el formato de entrada a la línea JSON en lugar de JSON solamente.
Solo una variación de las respuestas anteriores.
Intenté el comando de nodo directo anterior sin éxito, pero la sugerencia de
este problema de CLI angular
funcionó para mí: crea un script Node en su archivo
package.json
para aumentar la memoria disponible para Node cuando ejecuta su compilación de producción.
Entonces, si desea aumentar la memoria disponible para Node a 4 gb (
max-old-space-size=4096
), su comando Node sería
node --max-old-space-size=4096 ./node_modules/@angular/cli/bin/ng build --prod
.
(aumente o disminuya la cantidad de memoria dependiendo de sus necesidades también; 4 gb funcionaron para mí, pero es posible que necesite más o menos).
Luego lo agregaría a la sección ''scripts'' de su package.json de esta manera:
"prod": "node --max-old-space-size=4096 ./node_modules/@angular/cli/bin/ng build --prod"
Estaría contenido en el objeto de scripts junto con los otros scripts disponibles, por ejemplo:
"scripts": {
"ng": "ng",
"start": "ng serve",
"build": "ng build",
"test": "ng test",
"lint": "ng lint",
"e2e": "ng e2e",
"prod": "node --max-old-space-size=4096./node_modules/@angular/cli/bin/ng build --prod"
}
Y lo ejecutas llamando a
npm run prod
(es posible que necesites ejecutar
sudo npm run prod
si estás en una Mac o Linux).
Tenga en cuenta que puede haber un problema subyacente que está causando que Node necesite más memoria, esto no soluciona eso si ese es el caso, pero al menos le da a Node la memoria que necesita para realizar la compilación.
Una solución alternativa es deshabilitar el compilador AOT:
ng build --prod --aot false
Nota: vea la advertencia en los comentarios sobre cómo esto puede afectar las aplicaciones de Electron.
A partir de la versión 8.0 enviada en agosto de 2017, la variable de entorno NODE_OPTIONS expone esta configuración (ver
NODE_OPTIONS ha aterrizado en 8.x!
).
Según el artículo, solo se permiten las opciones
incluidas en la lista blanca en la fuente
(nota: ¡no es un enlace actualizado!), Que incluye
"--max_old_space_size"
.
Tenga en cuenta que el título de este artículo parece un poco engañoso: parece que NODE_OPTIONS ya existía, pero no estoy seguro de que haya expuesto esta opción.
Así que puse mi
.bashrc
:
export NODE_OPTIONS=--max_old_space_size=4096
$ sudo npm i -g increase-memory-limit
Ejecute desde la ubicación raíz de su proyecto:
$ increase-memory-limit
Esta herramienta agregará --max-old-space-size = 4096 en todas las llamadas de nodo dentro de sus archivos node_modules / .bin / *.
Node.js version> = 8 - AVISO DE DEPRECACIÓN
Desde NodeJs V8.0.0, es posible usar la opción
--max-old-space-size
.
NODE_OPTIONS=options...
$ export NODE_OPTIONS=--max_old_space_size=4096
npm install -g increase-memory-limit
aumentar-límite-memoria
O
-
Navegue a% appdata% -> carpeta npm o
C:/Users/{user_name}/AppData/Roaming/npm
- Abra ng.cmd en su editor favorito
-
Agregue
--max_old_space_size=8192
al bloqueIF
yELSE
ahora el archivo ng.cmd se 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" %*
)