L’utilisation d’un serveur Node.js pour faire tourner des applications web peut être consommateur en mémoire vive. Et une erreur fatale peut s’afficher dans le cas où cette mémoire volatile est saturée. Selon la configuration du serveur Nodejs et le service web hébergé, on peut rapidement saturer la RAM du processus mis en place sur un serveur Windows, macOS ou Linux.

FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed – process out of memory

FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed – Javascript heap out of memory

Il apparait dans les logs et est suivi d’autres indications qui ne donnent pas clairement la manière de résoudre ce problème. Ce tutoriel explique comment configurer un serveur Node.js pour ne plus avoir l’erreur « FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed – process out of memory » ou « FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed – Javascript heap out of memory » que l’on rencontre sur les usages web les plus gourmands. Plutôt sur des applications et portails web que de simples sites vitrines.

Autre problème et autre solution, on peut également réduire ou augmenter le nombre de processus nodejs, en fonction du nombre de coeurs (core) et de processeurs (CPU physique ou vCPU virtuel) dont dispose le serveur web.

 

Solution à ce message d’erreur Node js « out of memory »

Par défaut, le serveur Node.js est configuré avec une mémoire vive maximale de 512Mo par processus sur un environnement 32 bits, 1024Mo / 1Go sur une architecture 64 bits. C’est trop peu. Ces commandes permettent d’étendre la mémoire utilisée par le serveur web. La quantité de RAM à allouer est à définir en fonction de la mémoire vive disponible sur le serveur physique ou la machine virtuelle.

C’est avec la commande « – – max-old-space-size » que l’on peut repousser le message d’erreur fatale « out of memory » :

node --max-old-space-size=1024 index.js
node --max-old-space-size=2048 index.js
node --max-old-space-size=3072 index.js
node --max-old-space-size=5120 index.js
node --max-old-space-size=6144 index.js
node --max-old-space-size=8192 index.js

Il faut évidemment adapter cette commande au fichier javascript concerné.