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 navigateur, les développeurs doivent installer Node.js, un environnement d'exécution multiplateforme.
L'erreur JavaScript heap out of memory est fréquente lors de l'exécution d'un projet JavaScript Node.js.
L'erreur JavaScript heap out of memory 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 projet de grande envergure.
Si vous rencontrez l'erreur "heap out of memory", votre programme se bloquera et affichera le message suivant ;
FATAL ERROR : CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory (Échec de l'allocation de la mémoire)
Ou
Fatal error : invalid table size allocation failed - javascript heap out of memory (Erreur fatale : échec de l'allocation d'une taille de table invalide - JavaScript heap out of memory)
Causes de l'erreur JavaScript heap out of memory
- Présence de grandes structures de données : L'utilisation de grandes structures de données, telles que des matrices ou des tableaux, peut consommer beaucoup d'espace, ce qui peut entraîner une erreur de saturation du tas de mémoire.
Voici un exemple de grande structure de données comportant 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 vous débarrasser de certains 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 : Ce type de code s'exécute à l'infini car une condition de fin n'est jamais atteinte.
Voici un exemple de boucle infinie qui s'exécute indéfiniment ;
while (true) {
console.log(1) ;
}
Les boucles infinies peuvent conduire à cette erreur car elles consomment de la mémoire très 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 certain ensemble d'instructions jusqu'à ce qu'une certaine condition soit remplie. Si ces fonctions sont bien conçues, elles conduiront probablement à des erreurs de mémoire et, éventuellement, à des erreurs de tas de mémoire.
- Présence de nombreux objets dans un morceau de code : Si votre code contient de nombreux objets de grande taille, la mémoire utilisée par l'ensemble de ces objets peut entraîner une surcharge.
Corriger l'erreur JS heap out of memory
Cette erreur peut se produire sous Windows, macOS et les systèmes d'exploitation basés sur Linux comme Ubuntu. Heureusement, l'erreur peut être corrigée, quel que soit votre système d'exploitation.
#1. Correction de l'erreur JavaScript heap out of memory sous Windows OS
Étape 1: Cliquez sur le menu Démarrer et recherchez Paramètres système avancés
.
Étape 2: Cliquez sur Variables d'environnement
dans la partie inférieure gauche de la boîte de dialogue.

Étape 3: Cliquez sur Nouveau
, soit sur Variables utilisateur
, soit sur Variables système
. La première option applique les changements au compte de l'utilisateur actuel. Cependant, la seconde option applique les changements à l'ensemble du système.

Étape 4: Deux options s'affichent ; dans Nom de la variable
, entrez NODE_OPTIONS
et dans Valeur de la variable
, entrez --max-old-space-size=4096
. Dans cette étape, le chiffre 4096
allouera 4GB de mémoire virtuelle à Node.js. Vous pouvez en allouer davantage, par exemple 8 Go, en définissant la valeur -max-old-space-size=8192.

Étape 5: Cliquez sur ok
, apply
et enfin sur 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"

Vous pouvez également résoudre temporairement l'erreur en exécutant cette commande avant de lancer votre application ;
set NODE_OPTIONS=--max-old-space-size=4096
#2. Correction de l'erreur JavaScript heap out of memory sous Linux
- Étape 1 : Identifiez la source de l'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 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 permettront d'allouer 4 Go de mémoire virtuelle à Node.js. Si l'erreur persiste, vous pouvez doubler la taille de la mémoire.
Par exemple, si vous souhaitez allouer 8 Go de mémoire virtuelle, vous pouvez exécuter la commande suivante ;
export NODE_OPTIONS=--max-old-space-size=8192
#3. Correction de l'erreur JavaScript heap out of memory sur macOS
Vous pouvez résoudre l'erreur JavaScript heap out of memory sous macOS en utilisant une approche similaire à celle de Linux. Suivez les étapes suivantes ;
- Étape 1 : Identifiez la source de l'erreur en vérifiant 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 permettront d'allouer 4 Go de mémoire virtuelle à Node.js. Si l'erreur persiste, vous pouvez doubler la taille de la mémoire.
Par exemple, si vous souhaitez allouer 8 Go de mémoire virtuelle, vous pouvez exécuter la commande suivante ;
export NODE_OPTIONS=--max-old-space-size=8192
Augmenter la mémoire lors de l'installation de NPM
Les solutions proposées jusqu'à présent répondent 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 "heap out of memory" lorsque vous installez des paquets JavaScript. Utilisez la commande suivante ;
node --max-old-space-size=4096 (which npm) install
RemarqueVous 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 à Node.js, car cela pourrait faire planter votre programme. Par exemple, si votre machine dispose de 16 Go, vous pouvez allouer jusqu'à 8 Go à Node.js.
Prévenir l'erreur JavaScript "heap out of memory" (le tas n'a plus de mémoire)
Nous avons vu jusqu'à présent comment corriger l'erreur JavaScript heap out-of-memory lorsqu'elle se produit. Heureusement, vous pouvez également prendre des mesures pour empêcher cette erreur de se produire lorsque vous exécutez du code JavaScript. Voici quelques-unes des meilleures approches :
#1. Divisez les données en petits morceaux
Vous avez peut-être un programme Node.js qui importe de grands ensembles de données à partir de gros fichiers CSV via le processus ETL: Extraire - Transformer - Charger (extraction - transformation - chargement). Il se peut 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 utilisant une instruction de ligne de commande telle que ;
split -l 1000000 users.csv
Cette commande demande à Node.js de diviser un fichier nommé users en plusieurs fichiers contenant chacun 1000000 utilisateurs. Le drapeau -l
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. Ces deux outils peuvent détecter des problèmes dans votre code et les corriger.
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 dans votre application Node.js grâce à la méthode process.memoryUsage()
.
#3. Éviter les fuites de mémoire
Les 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, l'utilisation de la mémoire s'accumulera 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 les mots-clés let
et const
lors de la déclaration de vos variables au lieu de var
.
#4. Création de processus
Si vous utilisez Node.js sur une machine à mémoire limitée, comme le Raspberry Pi, vous risquez de rencontrer des erreurs de type "heap out of memory". Vous pouvez avoir un processus maître, et les 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 le tue et assigne la tâche à un autre processus qui n'est pas surchargé.
#5. Mettre à jour le matériel
Si l'augmentation de l'allocation de mémoire et la mise en œuvre des processus énumérés pour prévenir les erreurs de type "heap out of memory" ne résolvent pas vos problèmes, alors vous pouvez envisager de mettre à jour votre matériel. Node.js peut fonctionner avec une mémoire vive de 512 Mo. Cependant, votre application nécessitera plus de RAM au fur et à mesure de sa croissance.
D'autre part, l'augmentation du nombre de CPU peut également améliorer l'allocation de la mémoire. Idéalement, 2 CPU ou plus permettront à votre application d'utiliser des threads de travail pour les tâches intensives en CPU telles que la cryptographie et le traitement d'images.
FAQ
Cette erreur peut être causée par plusieurs raisons :
1. des fuites de mémoire
2. des boucles infinies 3. des erreurs de mémoire. Boucles infinies
3. Présence de nombreux objets dans un projet
4. Présence de grandes structures de données
Oui. Vous pouvez résoudre cette erreur en :
1. allouant plus de mémoire virtuelle à Node.js
2. En éliminant les fuites de mémoire
3. Optimiser votre code
4. Mettre à niveau votre matériel
React est l'une des bibliothèques JavaScript les plus populaires. Localisez le fichier package.json dans le répertoire racine et ajoutez ces lignes à 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 "heap out of memory" peut être corrigée. Nous avons défini ce qu'est l'erreur JavaScript heap out of memory, expliqué comment la résoudre et comment l'éviter dans votre prochain projet Node.js.
Ensuite, vous pouvez également lire comment éviter certaines erreurs JavaScript courantes.