L’erreur « JavaScript heap out of memory » est un problème courant lors du travail sur un projet JavaScript Node.js. Cette erreur se produit généralement lorsque la mémoire par défaut allouée par votre système à Node.js n’est pas suffisante pour exécuter un grand projet.
L’erreur est courante, que vous exécutiez votre projet sous Windows, macOS ou une distribution Linux comme Ubuntu. Heureusement, il existe quelques solutions faciles qui peuvent aider à résoudre l’erreur « JavaScript heap out of memory » ou « reached heap limit allocation failed ».
Qu’est-ce que la mémoire de masse ?
Avant de chercher à corriger l’erreur, il est utile de comprendre ce qu’est la mémoire tampon et comment les programmes l’utilisent.
La mémoire allouée sur le tas du système est également appelée mémoire allouée dynamiquement. C’est au programmeur d’utiliser la mémoire disponible comme bon lui semble. Plus important encore, la taille du tas d’un programme dépend de la mémoire virtuelle disponible qui lui est allouée.
Si vous exécutez un projet relativement important, il peut nécessiter plus de mémoire que le bloc alloué par défaut. Cela peut entraîner le plantage de votre projet et l’affichage de l’erreur « JavaScript heap out of memory ». Le problème de mémoire de tas dans Node.js peut également être causé par une taille de table de page invalide et des problèmes avec la pile d’appel de fonction.
Les journaux d’erreurs suivants indiquent des problèmes de mémoire de tas dans le moteur d’exécution Node.js :
- La limite du tas a été atteinte, l’allocation a échoué – le tas de javascript n’a plus de mémoire.
- Erreur fatale : l’allocation de call_and_retry_last a échoué – le tas de javascript n’a plus de mémoire.
- Erreur fatale : l’allocation de mark-compacts inefficaces près de la limite du tas a échoué – le tas de javascript n’a plus de mémoire.
- Erreur fatale : échec de l’allocation d’une taille de table invalide – le tas de javascript est hors de la mémoire.
Comment résoudre le problème de mémoire insuffisante de JavaScript sous Windows ?
Quel que soit votre IDE, la correction de « JavaScript heap out of memory » pour la correction de Node.js est identique.
Vous pouvez ajouter une variable d’environnement via le Panneau de configuration pour augmenter la mémoire allouée à un projet Node.js.
- Ouvrez le Menu Démarrer, rechercher Paramètres système avancés, et sélectionnez la meilleure correspondance.
- Dans la boîte de dialogue, cliquez sur Variables d’environnementpuis cliquez sur Nouveau de l’un ou l’autre Variables système ou Variables d’utilisateur. La première s’applique à tous les utilisateurs de votre ordinateur, tandis que la seconde ne concerne que votre compte actuel.
- Dans le Nom de la variable champ entrer NODE_OPTIONS. Dans le Valeur de la variable champ entrer –max-old-space-size=4096. Cette valeur allouera 4 Go de mémoire virtuelle à Node.js. Pour définir une valeur différente, multipliez la quantité dont vous avez besoin en Go par 1024 (la valeur de la variable doit être en Mo).
- Cliquez sur OK pour enregistrer vos modifications, puis cliquez sur Appliquer et enfin cliquez sur OK une fois de plus. Redémarrez votre projet pour que les changements prennent effet et vous ne serez plus confronté au problème « JavaScript heap out of memory ».
Vous pouvez également définir une variable d’environnement via un terminal Windows PowerShell.
Lancez un terminal PowerShell, tapez la commande ci-dessous et appuyez sur Entrée :
$env:NODE_OPTIONS="--max-old-space-size=4096"
Si vous souhaitez uniquement augmenter temporairement la mémoire du tas, exécutez la commande suivante dans un terminal PowerShell avant de lancer votre projet :
set NODE_OPTIONS=--max-old-space-size=4096
Une fois que vous avez entré cette commande, vous pouvez déployer/exécuter votre projet en utilisant npm run dev ou votre propre script.
N’oubliez pas de toujours indiquer la taille de la mémoire requise en Mo. Ne pas le faire peut entraîner un comportement inattendu de votre programme. Il est également essentiel de ne pas allouer toute la mémoire disponible, car cela peut provoquer une panne importante du système.
Comment corriger l’erreur JavaScript Heap Out of Memory sous macOS et Linux ?
Sous macOS et Linux, la correction de l’erreur « JavaScript heap out of memory » est très similaire. Vous devez exporter une variable d’environnement qui spécifie la quantité de mémoire virtuelle allouée à Node.js.
Dans votre terminal, avant d’exécuter votre projet, entrez la commande suivante et appuyez sur Entrée :
export NODE_OPTIONS=--max-old-space-size=4096
Cela allouera 4 Go de mémoire virtuelle à l’espace d’exécution de Node.js. Pour définir une quantité de mémoire différente, remplacez 4096 avec la quantité requise en MB.
Vous pouvez ajouter la commande ci-dessus à votre fichier de configuration pour éviter de répéter le processus. Pour ce faire, suivez le même processus pour définir votre variable PATH.
Éviter l’erreur JavaScript Heap Out of Memory
Vous pouvez éviter cette erreur en vous assurant que votre programme est exempt de fuites de mémoire. Une bonne gestion de la mémoire est cruciale lors de l’écriture de vos programmes, surtout dans un langage de bas niveau.
L’augmentation de la mémoire allouée résoudra temporairement le problème, mais vous devez trouver la cause profonde et la résoudre.