Estou tendo problemas para entender como o Node.js age com base no parâmetro max-old-space-size
.
No meu caso, por exemplo, estou executando duas t2.small
instâncias da AWS (2 GB de RAM).
Não sei por que, mas configurei max-old-space-size=4096
(4 GB). O que o nó faz neste caso? Essa configuração pode levar a uma possível falha de alocação de memória?
Como determino o valor correto de com max-old-space-size
base nos recursos do servidor?
Meu aplicativo está constantemente aumentando o uso de memória e estou tentando entender tudo sobre o interior do nó.
--optimize-for-size
a pena tentar reduzir o uso de memória.Respostas:
"Espaço antigo" é a maior e mais configurável seção do heap gerenciado do V8 (também conhecido como coleta de lixo) (ou seja, onde os objetos JavaScript residem), e o
--max-old-space-size
sinalizador controla seu tamanho máximo. Conforme o consumo de memória se aproxima do limite, o V8 gastará mais tempo na coleta de lixo em um esforço para liberar memória não utilizada.Se o consumo de memória heap (ou seja, objetos ativos que o GC não pode liberar) exceder o limite, o V8 travará seu processo (por falta de alternativa), portanto, você não deseja defini-lo muito baixo. Claro, se você definir um valor muito alto, o uso de heap adicional que o V8 permitirá pode fazer com que seu sistema geral fique sem memória (e troque ou elimine processos aleatórios, por falta de alternativa).
Em resumo, em uma máquina com 2 GB de memória, eu provavelmente configuraria
--max-old-space-size
para cerca de 1,5 GB para deixar alguma memória para outros usos e evitar a troca.fonte
d8 --help
:--max-old-space-size (max size of the old space (in Mbytes))
Atualização de 2020
Essas opções agora são documentadas oficialmente por nó . Para uma máquina de 2 GB, você provavelmente deve usar:
NODE_OPTIONS=--max-old-space-size=1536
Para determinar a quantidade a ser usada : Você pode ver a memória disponível em uma máquina Linux usando
free -m
. Observe que você pode usar ofree
e abuffers/cache
memória combinados, poisbuffers/cache
podem ser jogados fora (esses buffers e cache são uma boa maneira de usar a memória não utilizada de outra forma).Observe a documentação oficial para
max-old-space-size
também menções:Daí o valor acima. Considere que a quantidade de memória necessária para o sistema operacional básico não muda muito, então você poderia felizmente fazer 3,5 em uma máquina de 4 GB, etc.
fonte
Este erro ocorre quando a memória alocada para o aplicativo em execução é menor que a memória necessária. Por padrão, o limite de memória em Node.js é 512 MB. Para aumentar essa quantidade, você precisa definir o argumento de limite de memória
—-max-old-space-size
. Isso ajudará a evitar um problema de limite de memória.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
fonte
node --v8-options
) que o padrão relatado é 4096 e sem definirmax-old-space-size
o conjunto de testes que estou executando obtém até 1,5 Gb alocado sem problemas. O artigo médio com link é de 2016, então é provável que as coisas tenham mudado desde que foi escrito.node -e "console.log(`node heap limit = ${require('v8').getHeapStatistics().heap_size_limit / (1024 * 1024)} Mb`)"
-> v12.18.0 e v14.3.0 -> 2096Mb, v10.20.1 -> 1432Mbheap_size_limit
. Para um shell UNIX normal, ele precisa ser citado de forma diferente:node -e 'console.log(`node heap limit = ${require("v8").getHeapStatistics().heap_size_limit / (1024 * 1024)} Mb`)'
Se você deseja apenas que funcione a partir do projeto em que está trabalhando, siga as duas etapas:
Em seu projeto cd para node_module / @ angular cd node_module / @ angular
Agora execute o comando abaixo export NODE_OPTIONS = - max-old-space-size = 8192
fonte