Como corrigir “Erro de falta de memória de pilha de JavaScript”

O JavaScript continua sendo uma das linguagens de programação mais usadas devido à sua versatilidade. Para executar o JavaScript fora de um ambiente de navegador, os desenvolvedores devem instalar o Node.js, um ambiente de tempo de execução de plataforma cruzada.

O erro de falta de memória na pilha de JavaScript é comum ao executar um projeto JavaScript Node.js.

O problema de falta de memória do JavaScript é um erro que ocorre quando a memória padrão alocada pelo sistema do computador é insuficiente para executar um grande projeto.

Se você encontrar o erro heap out of memory, seu programa travará e exibirá esta saída;

ERRO FATAL: Falha na alocação de CALL_AND_RETRY_LAST – pilha de JavaScript sem memória

Ou

Erro fatal: falha na alocação de tamanho de tabela inválida – heap javascript sem memória

Causas do erro de pilha de memória insuficiente do JavaScript

  • Presença de grandes estruturas de dados: trabalhar com grandes estruturas de dados, como matrizes ou arrays, pode consumir muito espaço, eventualmente causando erro de heap out of memory.

Este é um exemplo de uma grande estrutura de dados com um bilhão de elementos;

let array = [];

for (let i = 0; i < 1000000000; i++) {

  array.push(i);

}
  • Gerenciamento de memória ruim: À medida que seu aplicativo cresce, você precisa liberar alguns dos objetos que não são mais necessários.

Este é um exemplo de uma função que leva ao vazamento de memória;

let array = [];

setInterval(function() {

  array.push(new Array(1000000).join("x"));

}, 1000);
  • Loops infinitos: esse código é executado para sempre, pois uma condição de término nunca é alcançada.

Este é um exemplo de um loop infinito que será executado para sempre;

while (true) {

    console.log(1);

}

Loops infinitos podem levar a esse erro, pois usam a memória muito rápido.

  • Funções recursivas: Uma função recursiva é uma função que chama a si mesma indireta ou diretamente para repetir um/determinado conjunto de instruções até que uma(s) determinada(s) condição(ões) seja(m) atendida(s). Se essas funções forem bem projetadas, elas provavelmente levarão a um erro de memória e, eventualmente, a um monte de erros de memória.
  • Presença de muitos objetos em um pedaço de código: Se seu código tiver muitos objetos grandes, a memória usada por esses objetos coletivamente pode levar a uma sobrecarga.
  Como alterar minha imagem do Google para GIF animado

Corrigir o erro de falta de memória do heap JS

Esse erro pode ocorrer em sistemas operacionais baseados em Windows, macOS e Linux, como o Ubuntu. Felizmente, o erro pode ser corrigido, independentemente do seu sistema operacional.

#1. Corrigindo o erro de pilha de JavaScript sem memória no sistema operacional Windows

Etapa 1: clique no menu Iniciar e localize Configurações avançadas do sistema.

Etapa 2: clique em Variáveis ​​de ambiente na parte inferior esquerda da caixa de diálogo.

Etapa 3: Clique em Novo em Variáveis ​​de usuário ou Variáveis ​​de sistema. A primeira opção aplica as alterações à conta do usuário atual. No entanto, a segunda opção aplica as alterações a todo o sistema.

Passo 4: Serão exibidas duas opções; no nome da variável, insira NODE_OPTIONS e no valor da variável, insira –max-old-space-size=4096. Nesta etapa, a figura 4096 alocará 4 GB de memória virtual para o Node.js. Você pode alocar mais, como 8 GB, definindo o valor como –max-old-space-size=8192.

Passo 5: Clique em ok, aplique e por fim, ok para salvar as alterações.

Você também pode usar o terminal do Windows PowerShell para resolver o erro. Abra o terminal em seu sistema operacional Windows e digite o seguinte comando;

env:NODE_OPTIONS="--max-old-space-size=4096"

Você também pode resolver o erro temporariamente executando este comando antes de executar seu aplicativo;

set NODE_OPTIONS=--max-old-space-size=4096

#2. Corrigindo o erro de pilha de JavaScript sem memória no Linux

  • Passo 1: Identifique a origem do erro. Verifique os logs ou a saída do console para determinar as linhas de código/arquivo que estão causando o erro.
  • Etapa 2: exporte uma variável de ambiente especificando a memória virtual que você alocou para o Node.js. Use este comando;
export NODE_OPTIONS=--max-old-space-size=4096

Essas etapas alocarão 4 GB de memória virtual para o Node.js. Se o erro persistir, você pode aumentar o tamanho da memória dobrando.

Por exemplo, se você deseja alocar 8 GB como memória virtual, pode executar este comando;

export NODE_OPTIONS=--max-old-space-size=8192

#3. Corrigindo o erro de pilha de JavaScript sem memória no macOS

Você pode resolver o erro de pilha de JavaScript sem memória no macOS usando uma abordagem semelhante à do Linux. Siga esses passos;

  • Etapa 1: Identifique a origem do erro verificando os logs ou a saída do console para determinar as linhas de código/arquivo que estão causando o erro.
  • Etapa 2: exporte uma variável de ambiente especificando a memória virtual que você alocou para o Node.js. Use este comando;
export NODE_OPTIONS=--max-old-space-size=4096

Essas etapas alocarão 4 GB de memória virtual para o Node.js. Se o erro persistir, você pode aumentar o tamanho da memória dobrando.

  3 maneiras de dar Robux aos amigos

Por exemplo, se você deseja alocar 8 GB como memória virtual, pode executar este comando;

export NODE_OPTIONS=--max-old-space-size=8192

Aumentando a memória durante a instalação do NPM

As soluções que oferecemos até agora atendem a erros que ocorrem quando você executa um aplicativo Node.js. No entanto, você pode alocar memória virtual para resolver o erro de falta de memória ao instalar pacotes JavaScript. Use este comando;

node --max-old-space-size=4096 (which npm) install

Observação: você pode continuar aumentando a alocação de memória virtual em 1 GB, 2 GB, 3 GB ou 4 GB. Você deve especificar o tamanho da memória em MBs. No entanto, não aloque toda a memória da máquina para o Node.js, pois isso pode causar a falha do programa. Como boa prática, se sua máquina tiver 16 GB, você pode alocar até 8 GB para o Node.js.

Impedir o erro de heap out of memory do JavaScript

Até agora, discutimos como corrigir o erro de falta de memória do heap JavaScript quando ele ocorre. Felizmente, você também pode ter medidas para evitar que esse erro ocorra ao executar o código JavaScript. Estas são algumas das melhores abordagens:

#1. Divida os dados em pequenos pedaços

Você pode ter um programa Node.js que importa grandes conjuntos de dados de grandes arquivos CSV por meio do processo ETL: Extrair – Transformar – Carregar. Você pode descobrir que seu aplicativo sempre trava quando você tenta importar os dados. Se você estiver trabalhando com o MongoDB, poderá resolver o erro com uma instrução de linha de comando como;

split -l 1000000 users.csv

Este comando instrui o Node.js a dividir um arquivo chamado users em vários arquivos com 1.000.000 usuários cada. O sinalizador -l especifica que o arquivo deve ser dividido com base no número de linhas de código.

#2. Monitorar o uso de memória

Você pode usar um criador de perfil de memória para detectar vazamentos de memória em seu código. Você pode combinar a memória interna do Node.js e as ChromeDevTools para conseguir isso. Os dois podem detectar problemas em seu código e corrigi-los.

  9 principais aplicativos de pesquisa de número de telefone para golpistas

Você também pode usar ferramentas externas como Datadog, New Relic e AppDynamics para monitorar o desempenho do seu aplicativo e tomar as medidas necessárias. Você também pode verificar o uso de memória em seu aplicativo Node.js por meio do método process.memoryUsage().

#3. Evitando vazamentos de memória

Vazamentos de memória ocorrem quando seu aplicativo Node.js retém referências a objetos que não são mais necessários. Se esses objetos não forem coletados como lixo, haverá um acúmulo de uso de memória ao longo do tempo.

Existem várias abordagens para evitar vazamentos de memória, como evitar variáveis ​​globais em seu código, evitar operações de E/S de bloqueio e usar as palavras-chave let e const ao declarar suas variáveis ​​em vez de var.

#4. Processos de desova

Se você estiver executando o Node.js em uma máquina com memória limitada, como Raspberry Pi, provavelmente encontrará erros de falta de memória. Você pode ter um processo mestre e outros são agrupados como trabalhadores. Assim que o processo mestre detectar que o sistema está ficando sem memória, ele matará esse processo e atribuirá a tarefa a outro que não esteja sobrecarregado.

#5. Atualizar hardware

Se o aumento da alocação de memória e a execução dos processos listados para evitar erros de falta de memória não resolverem seus problemas, você pode considerar atualizar seu hardware. O Node.js pode ser executado em RAM de até 512 MB. No entanto, seu aplicativo exigirá mais RAM à medida que cresce.

Por outro lado, aumentar o número de CPUs também pode melhorar a alocação de memória. Idealmente, 2 ou mais CPUs permitirão que seu aplicativo use threads de trabalho para tarefas intensivas de CPU, como criptografia e processamento de imagens.

perguntas frequentes

O que causa o erro de falta de memória no JavaScript?

Esse erro pode ser causado por vários motivos;
1. Vazamentos de memória
2. Loops infinitos
3. Presença de muitos objetos em um projeto
4. Presença de grandes estruturas de dados

O erro de pilha sem memória do JavaScript pode ser resolvido?

Sim. Você pode resolver o erro através de;
1. Alocando mais memória virtual para Node.js
2. Eliminando vazamentos de memória
3. Otimizando seu código
4. Atualizando seu hardware

Como você pode resolver o erro Heap Out of Memory no aplicativo React?

React é uma das bibliotecas JavaScript mais populares. Localize o arquivo package.json no diretório raiz e essas linhas na seção de scripts;

"scripts": {

    "start": "react-scripts --max_old_space_size=4096 start",

    "build": "react-scripts --max_old_space_size=4096 build",

    "test": "react-scripts test",

    "eject": "react-scripts eject"

}

Empacotando

A maioria dos desenvolvedores está acostumada com bugs e erros de código, não erros de tempo de execução, enquanto executam seus programas Node.js. Felizmente, você não precisa se preocupar, pois o erro de heap out of memory pode ser corrigido. Definimos o que é o erro de heap de falta de memória do JavaScript, explicamos como resolvê-lo e como evitá-lo em seu próximo projeto Node.js.

Em seguida, você também pode ler como evitar alguns erros comuns de JavaScript.