Tengo problemas para entender cómo actúa Node.js en función del parámetro max-old-space-size
.
En mi caso, por ejemplo, estoy ejecutando dos t2.small
instancias de AWS (2 GB de RAM).
No estoy seguro de por qué, pero configuré max-old-space-size=4096
(4GB). ¿Qué hace el nodo en este caso? ¿Esta configuración podría provocar una posible falla en la asignación de memoria?
¿Cómo puedo determinar el valor correcto de max-old-space-size
según los recursos del servidor?
Mi aplicación aumenta constantemente el uso de la memoria y estoy tratando de entender todo sobre los componentes internos de los nodos.
Respuestas:
El "espacio antiguo" es la sección más grande y configurable del montón administrado (también conocido como recolección de basura) de V8 (es decir, donde viven los objetos JavaScript), y la
--max-old-space-size
bandera controla su tamaño máximo. A medida que el consumo de memoria se acerca al límite, V8 dedicará más tiempo a la recolección de basura en un esfuerzo por liberar memoria no utilizada.Si el consumo de memoria del montón (es decir, objetos en vivo que el GC no puede liberar) excede el límite, V8 bloqueará su proceso (por falta de alternativa), por lo que no querrá establecerlo demasiado bajo. Por supuesto, si lo establece demasiado alto, entonces el uso adicional del montón que permitirá V8 podría hacer que su sistema general se quede sin memoria (y que intercambie o elimine procesos aleatorios, por falta de alternativa).
En resumen, en una máquina con 2 GB de memoria probablemente establecería
--max-old-space-size
alrededor de 1,5 GB para dejar algo de memoria para otros usos y evitar el intercambio.fuente
d8 --help
:--max-old-space-size (max size of the old space (in Mbytes))
Actualización 2020
Estas opciones ahora están documentadas oficialmente por nodo . Para una máquina de 2GB, probablemente debería usar:
NODE_OPTIONS=--max-old-space-size=1536
Para determinar la cantidad a usar : Puede ver la memoria disponible en una máquina Linux usando
free -m
. Tenga en cuenta que puede usar la memoriafree
y labuffers/cache
memoria combinadas, ya quebuffers/cache
se pueden desechar (estos búferes y caché son una buena manera de usar la memoria que de otro modo no se usaría).Tenga en cuenta la documentación oficial para
max-old-space-size
también menciona:De ahí el valor anterior. Tenga en cuenta que la cantidad de memoria necesaria para el sistema operativo base no cambia mucho, por lo que podría hacer 3.5 en una máquina de 4GB, etc.
fuente
Este error ocurre cuando la memoria asignada para la aplicación en ejecución es menor que la memoria requerida. De forma predeterminada, el límite de memoria en Node.js es de 512 MB. Para aumentar esta cantidad, debe establecer el argumento de límite de memoria
—-max-old-space-size
. Ayudará a evitar un problema de límite de memoria.node --max-old-space-size=1024 index.js #increase to 1gb node --max-old-space-size=2048 index.js #increase to 2gb node --max-old-space-size=3072 index.js #increase to 3gb node --max-old-space-size=4096 index.js #increase to 4gb node --max-old-space-size=5120 index.js #increase to 5gb node --max-old-space-size=6144 index.js #increase to 6gb node --max-old-space-size=7168 index.js #increase to 7gb node --max-old-space-size=8192 index.js #increase to 8gb
https://medium.com/@vuongtran/how-to-solve-process-out-of-memory-in-node-js-5f0de8f8464c
fuente
node --v8-options
) que el informe predeterminado es 4096 y, sin configurarmax-old-space-size
el conjunto de pruebas que estoy ejecutando, se asignan hasta 1,5 Gb sin problemas. El artículo mediano vinculado es de 2016, por lo que es probable que las cosas hayan avanzado desde que se escribió.node -e "console.log(`node heap limit = ${require('v8').getHeapStatistics().heap_size_limit / (1024 * 1024)} Mb`)"
-> v12.18.0 y v14.3.0 -> 2096Mb, v10.20.1 -> 1432Mbheap_size_limit
. Para un shell UNIX normal, debe citarse de manera diferente:node -e 'console.log(`node heap limit = ${require("v8").getHeapStatistics().heap_size_limit / (1024 * 1024)} Mb`)'
Si solo desea que funcione desde el proyecto en el que está trabajando, siga los dos pasos:
En su proyecto, cd a node_module / @ angular cd node_module / @ angular
Ahora ejecute el siguiente comando exportar NODE_OPTIONS = - max-old-space-size = 8192
fuente