Geekflare est soutenu par notre public. Nous pouvons gagner des commissions d'affiliation en achetant des liens sur ce site.
Partager sur:

Résolu : Comment réparer "Erreur de mémoire insuffisante pour le tas JavaScript"

JavaScript-Heap-Out-of-Memory-Erreur
Scanner de sécurité des applications Web Invicti – la seule solution qui offre une vérification automatique des vulnérabilités avec Proof-Based Scanning™.

JavaScript reste l'un des langages de programmation les plus utilisés en raison de sa polyvalence. Pour exécuter JavaScript en dehors d'un environnement de navigateur, les développeurs doivent installer Node.js, un environnement d'exécution multiplateforme. 

L'erreur JavaScript heap out of memory est courante lors de l'exécution d'un projet JavaScript Node.js. 

Le problème de manque de mémoire JavaScript est une erreur qui se produit lorsque la mémoire par défaut allouée par le système informatique est insuffisante pour exécuter un gros projet. 

Si vous rencontrez l'erreur Heap Out of Memory, votre programme plantera et affichera cette sortie.

FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory

Or 

Fatal error: invalid table size allocation failed - javascript heap out of memory

Causes of JavaScript heap out of memory error

  • Présence de grandes structures de données : Travailler avec de grandes structures de données telles que des matrices ou des tableaux peut consommer beaucoup d'espace, provoquant éventuellement une erreur de mémoire insuffisante.

Ceci est un exemple d'une grande structure de données avec un milliard d'éléments ; 

let array = [];

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

  array.push(i);

}
  • Mauvaise gestion de la mémoire : Au fur et à mesure que votre application se développe, vous devez abandonner certains des objets dont vous n'avez plus besoin. 

Voici un exemple de fonction qui entraîne une fuite de mémoire ;

let array = [];

setInterval(function() {

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

}, 1000);
  • Boucles infinies : Un tel code s'exécute indéfiniment car une condition de terminaison n'est jamais atteinte. 

Ceci est un exemple de boucle infinie qui s'exécutera indéfiniment ;

while (true) {

    console.log(1);

}

Des boucles infinies peuvent entraîner cette erreur car elles utilisent la mémoire assez rapidement. 

  • Fonctions récursives : Une fonction récursive est une fonction qui s'appelle elle-même indirectement ou directement pour répéter un ensemble d'instructions jusqu'à ce qu'une ou plusieurs conditions soient remplies. Si ces fonctions sont bien conçues, elles entraîneront probablement une perte de mémoire et, éventuellement, un tas d'erreurs de mémoire. 
  • Présence de nombreux objets dans un morceau de code : Si votre code comporte de nombreux objets volumineux, la mémoire utilisée collectivement par ces objets peut entraîner une surcharge. 

Fix JS heap out of memory error

Cette erreur peut se produire dans les systèmes d'exploitation Windows, macOS et Linux comme Ubuntu. Heureusement, l'erreur peut être corrigée, quel que soit votre système d'exploitation. 

# 1. Correction de l'erreur JavaScript de mémoire insuffisante sur le système d'exploitation Windows

Étape 1: Cliquez sur le menu Démarrer et localisez Advanced System Settings.

Étape 2: Clique sur le Environment Variables en bas à gauche de la boîte de dialogue. 

1-3

Étape 3: Cliquez New sur l'un ou l'autre User variables or System variables. La première option applique les modifications au compte d'utilisateur actuel. Cependant, la deuxième option applique les modifications à l'ensemble du système. 

2-2

Étape 4: Il y aura deux options affichées ; sur variable name, Entrer NODE_OPTIONS et sur Variable value, Entrer --max-old-space-size=4096. Dans cette étape, le 4096 chiffre allouera 4 Go de mémoire virtuelle à Node.js. Vous pouvez en allouer davantage, par exemple 8 Go, en définissant la valeur sur –max-old-space-size=8192. 

3-1

Étape 5: Cliquez ok, apply et enfin, ok Pour enregistrer les modifications. 

Vous pouvez également utiliser le terminal Windows PowerShell pour résoudre l'erreur. Ouvrez le terminal sur votre système d'exploitation Windows et entrez la commande suivante ;

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

Vous pouvez également résoudre temporairement l'erreur en exécutant cette commande avant d'exécuter votre application ;

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

# 2. Correction de l'erreur de mémoire insuffisante du tas JavaScript sous Linux

  • Étape 1 : Identifiez la source d'erreur. Vérifiez les journaux ou la sortie de la console pour déterminer les lignes de code/fichier à l'origine de l'erreur.
  • Étape 2 : Exportez une variable d'environnement en spécifiant la mémoire virtuelle que vous avez allouée à Node.js. Utilisez cette commande ; 
export NODE_OPTIONS=--max-old-space-size=4096
image 213

Ces étapes alloueront 4 Go de mémoire virtuelle à Node.js. Si l'erreur persiste, vous pouvez augmenter la taille de la mémoire en doublant. 

Par exemple, si vous souhaitez allouer 8 Go comme mémoire virtuelle, vous pouvez exécuter cette commande ;

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

# 3. Correction de l'erreur de mémoire insuffisante du tas JavaScript sur macOS 

Vous pouvez résoudre l'erreur de mémoire insuffisante du tas JavaScript dans macOS en utilisant une approche similaire à celle de Linux. Suivez ces étapes;

  • Étape 1 : Identifiez la source de l'erreur en consultant les journaux ou la sortie de la console pour déterminer les lignes de code/fichier à l'origine de l'erreur.
  • Étape 2 : Exportez une variable d'environnement spécifiant la mémoire virtuelle que vous avez allouée à Node.js. Utilisez cette commande ; 
export NODE_OPTIONS=--max-old-space-size=4096

Ces étapes alloueront 4 Go de mémoire virtuelle à Node.js. Si l'erreur persiste, vous pouvez augmenter la taille de la mémoire en doublant. 

Par exemple, si vous souhaitez allouer 8 Go comme mémoire virtuelle, vous pouvez exécuter cette commande ;

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

Augmenter la mémoire pendant l'installation de NPM

Les solutions que nous avons proposées jusqu'à présent conviennent aux erreurs qui se produisent lorsque vous exécutez une application Node.js. Cependant, vous pouvez allouer de la mémoire virtuelle pour résoudre l'erreur de mémoire insuffisante lorsque vous installez des packages JavaScript. Utilisez cette commande ;

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

Notes: Vous pouvez continuer à augmenter l'allocation de mémoire virtuelle de 1 Go, 2 Go, 3 Go ou 4 Go. Vous devez spécifier la taille de la mémoire en Mo. Cependant, n'allouez pas toute la mémoire de la machine au Node.js car cela pourrait faire planter votre programme. En règle générale, si votre machine dispose de 16 Go, vous pouvez allouer jusqu'à 8 Go à Node.js. 

Prevent JavaScript the heap out of memory error

Jusqu'à présent, nous avons expliqué comment corriger l'erreur de manque de mémoire du tas JavaScript lorsqu'elle se produit. Heureusement, vous pouvez également prendre des mesures pour éviter que cette erreur ne se produise lorsque vous exécutez du code JavaScript. Voici quelques-unes des meilleures approches :

# 1. Fractionner les données en petits morceaux

Vous pouvez avoir un programme Node.js qui importe de grands ensembles de données à partir de gros fichiers CSV via le ETL: Extraire – Transformer – Charger le processus. Vous constaterez peut-être que votre application se bloque toujours lorsque vous essayez d'importer les données. Si vous travaillez avec MongoDB, vous pouvez résoudre l'erreur en ayant une instruction de ligne de commande telle que ;

split -l 1000000 users.csv

Cette commande demande à Node.js de diviser un fichier nommé utilisateurs en plusieurs fichiers de 1000000 XNUMX XNUMX utilisateurs chacun. Le -l flag spécifie que le fichier doit être divisé en fonction du nombre de lignes de code. 

# 2. Surveiller l'utilisation de la mémoire

Vous pouvez utiliser un profileur de mémoire pour détecter les fuites de mémoire dans votre code. Vous pouvez combiner la mémoire intégrée de Node.js et les ChromeDevTools pour y parvenir. Les deux peuvent détecter les problèmes dans votre code et les résoudre.

Vous pouvez également utiliser des outils externes tels que Datadog, New Relic et AppDynamics pour surveiller les performances de votre application et prendre les mesures nécessaires. Vous pouvez également vérifier l'utilisation de la mémoire sur votre application Node.js via le process.memoryUsage() méthode. 

# 3. Éviter les fuites de mémoire

Des fuites de mémoire se produisent lorsque votre application Node.js conserve des références à des objets dont elle n'a plus besoin. Si ces objets ne sont pas ramassés, il y aura une accumulation d'utilisation de la mémoire au fil du temps.

Il existe plusieurs approches pour éviter les fuites de mémoire, comme éviter les variables globales dans votre code, éviter de bloquer les opérations d'E/S et utiliser let et const mots-clés lors de la déclaration de vos variables au lieu de var

# 4. Processus de frai

Si vous exécutez Node.js sur une machine avec une mémoire limitée, telle que Raspberry Pi, vous risquez de rencontrer des erreurs de mémoire insuffisante. Vous pouvez avoir un processus maître et d'autres sont regroupés en tant que travailleurs. Dès que le processus maître détecte que le système manque de mémoire, il tue ce processus et assigne la tâche à un autre qui n'est pas surchargé. 

# 5. Mise à jour du matériel

Si l'augmentation de l'allocation de mémoire et l'exécution des processus répertoriés de prévention des erreurs de mémoire insuffisante ne résolvent pas vos problèmes, vous pouvez envisager de mettre à jour votre matériel. Node.js peut fonctionner sur une RAM aussi faible que 512 Mo. Cependant, votre application exigera plus de RAM au fur et à mesure de sa croissance. 

D'autre part, l'augmentation du nombre de processeurs peut également améliorer l'allocation de mémoire. Idéalement, 2 processeurs ou plus permettront à votre application d'utiliser des threads de travail pour des tâches gourmandes en ressources processeur telles que la cryptographie et traitement d'image.

FAQs

Qu'est-ce qui cause l'erreur JavaScript Heap Out of Memory ?

Cette erreur peut être causée par plusieurs raisons ;
1. Fuites de mémoire
2. Boucles infinies
3. Présence de nombreux objets dans un projet
4. Présence de grandes structures de données

L'erreur JavaScript Heap Out of Memory peut-elle être résolue ?

Oui. Vous pouvez résoudre l'erreur via;
1. Allouer plus de mémoire virtuelle à Node.js
2. Éliminer les fuites de mémoire
3. Optimiser votre code
4. Mise à niveau de votre matériel

Comment pouvez-vous résoudre l'erreur Heap Out of Memory dans l'application React ? 

React est l'une des bibliothèques JavaScript les plus populaires. Localisez le fichier package.json dans le répertoire racine et ces lignes dans la section 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"

}

Récapitulation

La plupart des développeurs sont habitués aux bogues et aux erreurs de code, et non aux erreurs d'exécution, lorsqu'ils exécutent leurs programmes Node.js. Heureusement, vous n'avez pas à vous inquiéter, car l'erreur de mémoire insuffisante est réparable. Nous avons défini ce qu'est l'erreur JavaScript de mémoire insuffisante, expliqué comment la résoudre et comment l'éviter dans votre prochain projet Node.js. 

Ensuite, vous pouvez également lire comment éviter certains problèmes courants. Erreurs JavaScript.

Merci à nos commanditaires
Plus de bonnes lectures sur le développement
Alimentez votre entreprise
Certains des outils et services pour aider votre entreprise à se développer.
  • Invicti utilise Proof-Based Scanning™ pour vérifier automatiquement les vulnérabilités identifiées et générer des résultats exploitables en quelques heures seulement.
    Essayez Invicti
  • Web scraping, proxy résidentiel, proxy manager, web unlocker, moteur de recherche et tout ce dont vous avez besoin pour collecter des données Web.
    Essayez Brightdata
  • Semrush est une solution de marketing numérique tout-en-un avec plus de 50 outils de référencement, de médias sociaux et de marketing de contenu.
    Essayez Semrush
  • Intruder est un scanner de vulnérabilités en ligne qui détecte les failles de cybersécurité de votre infrastructure, afin d'éviter des violations de données coûteuses.
    Essayez Intruder