returned old increase fatal failed error call_and_retry_last after node.js

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ó:

  1. 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
  2. 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 o npm 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

  1. Navegue a% appdata% -> carpeta npm o C:/Users/{user_name}/AppData/Roaming/npm
  2. Abra ng.cmd en su editor favorito
  3. Agregue --max_old_space_size=8192 al bloque IF y ELSE

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" %* )