Catégories
Développement Expert

Node.js : solution au « process out of memory »

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é.

Catégories
Développement Expert

Effacer le cache npm

Etroitement lié à Node.js, npm est le gestionnaire de paquets officiel de la plateforme JavaScript. Désormais propriété de GitHub, npm est installé en même temps que Nodejs puisque fait entièrement partie de l’environnement. Le Node Package Manager travaille avec un cache sur le disque dur de la machine, virtuelle ou physique, et celui-ci peut rapidement gonfler jusqu’à occuper plusieurs Go d’espace. Ce tutoriel explique comment vider le cache npm, ou clean npm cache en anglais, pour récupérer de l’espace disque et tout simplement supprimer les informations mises dans le cache npm / node.js pour débugger un problème.

Ce tutoriel fonctionne sur les systèmes d’exploitation Windows et Linux (Ubuntu, Debian, Red Hat, CentOS, Fedora…).

Sur Windows, le cache se trouve dans %AppData%\Roaming\npm-cache mais il ne faut pas supprimer ces fichiers à la main depuis un Explorateur de fichiers.

 

Clean cache npm en ligne de commande

1. Sur Windows, ouvrir un Invite de commandes (cmd). Sur Linux, ouvrir un Terminal ou une connexion distante SSH.

2. Taper la commande suivante pour vérifier la consistance du cache npm :

npm cache verify

3. Ecrire cette commande pour forcer le vidage du cache npm :

npm cache clean --force

L’alias « npm cache clear –force » fonctionne également.

4. On vérifie le bon déroulement de l’opération :

npm cache verify

5. Le cache de npm est vide et l’espace occupé sur le disque dur est libéré.

Catégories
Expert Linux

Installer Node.js sur Fedora, RHEL, CentOS

Node.js est une plateforme pour héberger des applications web et des sites internet qui utilise JavaScript. Libre et multi-plateformes, NodeJS est compatible Windows, macOS, Android et bien sûr Linux. Il est facile d’installer Node.js sur Ubuntu et Debian mais pas plus difficile de le faire sur son concurrent de noyau. Ainsi, voici le tutoriel pour installer Node.js sur les distributions Red Hat Enterprise Linux (RHEL), CentOS, CloudLinux et Fedora, depuis les dépôts officiels. Il s’agit des distros basées sur Enterprise Linux. Pourquoi ce tuto ? Car le site officiel ne mentionne pas clairement ces informations, ici la solution est expliquée de manière simple et résumée en une courte procédure.

Depuis la version 10.x, Node.js est uniquement disponible en architecture 64 bits x86_64. Le i386 (32 bits) n’est donc plus supporté.

 

Installer / upgrade Node.js 13 sur RHEL, Fedora, CentOS

1. Faire un curl selon la version désirée :

curl -sL https://rpm.nodesource.com/setup_13.x | bash -
curl -sL https://rpm.nodesource.com/setup_12.x | bash -
curl -sL https://rpm.nodesource.com/setup_11.x | bash -
curl -sL https://rpm.nodesource.com/setup_10.x | bash -
curl -sL https://rpm.nodesource.com/setup_8.x | bash -

2. Utiliser dnf pour l’installation dans la version choisie :

sudo dnf install nodejs

 

Installer les outils de développement Node.js

sudo dnf install -y gcc-c++ make

 

Vérifier la version de Node.js installée

node --version

Et la version de npm :

npm --version

 

Compatibilité Node.js et RHEL, CentOS, Fedora

Compatibilité Node.js et RHEL

Node.js est compatible Red Hat Enterprise Linux 6, 7 et 8. RHEL 6 ne supporte que Nodejs 11 au mieux, pas 12.x ni ultérieur.

Compatibilité Node.js et CentOS

Idem pour Cent OS : NodeJS est compatible CentOS 6, 7 et 8 mais la CentOS6 est limitée à Node 11.

Compatibilité Node.js et Fedora

Les versions semestrielles de Fedora compliquent le tableau des compatibilités. Tout est indiqué en architecture 64bits. L’éditeur indique que la distribution équivalente Korora Linux doit aussi supporter les mêmes versions.

  • Fedora 27 compatible jusqu’à Node.js 11.x
  • Fedora 28 pour Node.js 8.11.2 et supérieur
  • Fedora 29 pour Node.js 10.13.0 et supérieur
  • Fedora 30 pour Node.js 10.16.0 et supérieur
  • Fedora 31 pour Node.js 10.17.0 et supérieur
Catégories
Expert Linux

Installer ou mettre à jour Node.js sur Debian / Ubuntu

Node.js est un logiciel multiplateformes (Linux, Windows, macOS, Android…) et libre qui peut servir de serveur web HTTP / HTTPS et héberger des applications web. L’environnement d’exécution JavaScript NodeJS est donc compatible avec les distributions Linux Debian et Ubuntu, que l’on peut installer via les dépôts officiels de Nodesource.

Que ce soit pour installer le paquet d’origine ou pour monter en version (upgrade 10 vers 12, par exemple), ce tutoriel indique les commandes à taper pour les OS Debian, Ubuntu et autres distributions basées sur le même noyau (Linux Mint, Devuan, elemantary OS, Trisquel, BOSS, BunsenLabs). PC de développeur, machine de test ou serveur, la procédure est la même. Si votre machine est sur base Enterprise Linux, voici le tuto pour installer Node sur RHEL, Fedora et CentOS.

Cela va à chaque fois installer la dernière version disponible dans la release souhaitée. Par exemple, installer la v12 va mettre en place la 12.13.1

Remarque : s’il y a une erreur avec cette commande, il faudra installer le paquet curl et ré-exécuter la commande : sudo apt install curl

Pour ajouter les addons npm, il faudra les build tools : apt-get install -y build-essential

 

Installer / upgrade Node.js 13 sur Ubuntu et Debian

Avec Ubuntu :

curl -sL https://deb.nodesource.com/setup_13.x | sudo -E bash -
sudo apt-get install -y nodejs

Sous Debian, en root :

curl -sL https://deb.nodesource.com/setup_13.x | bash -
apt-get install -y nodejs

 

Installer / upgrade Node.js 12 sur Ubuntu et Debian

En Ubuntu :

curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
sudo apt-get install -y nodejs

Sur Debian, en root :

curl -sL https://deb.nodesource.com/setup_12.x | bash -
apt-get install -y nodejs


Installer / upgrade Node.js 11 sur Ubuntu et Debian

Avec Ubuntu :

curl -sL https://deb.nodesource.com/setup_11.x | sudo -E bash -
sudo apt-get install -y nodejs

Sous Debian, en root :

curl -sL https://deb.nodesource.com/setup_11.x | bash -
apt-get install -y nodejs


Installer / upgrade Node.js 10 sur Ubuntu et Debian

Avec Ubuntu :

curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash -
sudo apt-get install -y nodejs

Sous Debian, en root :

curl -sL https://deb.nodesource.com/setup_10.x | bash -
apt-get install -y nodejs


Installer / upgrade Node.js 8 sur Ubuntu et Debian

Avec Ubuntu :

curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
sudo apt-get install -y nodejs

Sous Debian, en root :

curl -sL https://deb.nodesource.com/setup_8.x | bash -
apt-get install -y nodejs

Vérifier la version installée

Pour s’assurer que le logiciel soit bien installé dans la version souhaitée, une simple commande suffit :

node -v

Catégories
Expert Linux

Installer Nodejs 8 sur serveur Debian, Ubuntu

La documentation officielle de Node.js demande d’aller sur NodeSource pour télécharger des fichiers mais les distributions Linux Debian et Ubuntu proposent le logiciel dans leurs dépôts officiels. Bien que NodeJS version 8 soit LTS, son « End of life » est datée au 31 décembre 2019. Le 1er janvier 2020, il ne sera donc plus possible d’utiliser Node.js8 avec support. Il faudra basculer sur les LTS ultérieures que sont Node.js 10 ou Node.js 12. En attendant, ce tutoriel explique comment installer Node.js 8 LTS sur Debian et Ubuntu en quelques lignes de commande. La méthode la plus simple qui existe.

Node.js est un logiciel libre multiplateformes (GNU Linux, Windows, macOS, FreeBSD, AIX, Android et SmartOS) qui peut servir de serveur web HTTP / HTTPS et ainsi se passer d’un Nginx ou d’un Apache pour héberger des applications web développées avec NodeJS.

Pour installer ou mettre à jour dans une version plus récente de Node, suivre ce tuto pour Debian Ubuntu ou celui-ci pour Fedora, CentOS et RHEL.

 

Installer Node.js 8 LTS sur Ubuntu et Debian

1. Ouvrir un Terminal en local ou une connexion distante SSH sur la machine Ubuntu ou Debian.

2. Installer curl si pas encore présent (au pire, l’assistant dira que le paquet est déjà présent sur le poste) :

sudo apt install curl

3. Ajouter l’URL :

curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -

-s signifie « silent » et -L « location »

4. Installer node.js de manière traditionnelle :

sudo apt install -y nodejs

5. L’environnement d’exécution JavaScript NodeJS est maintenant installé.

 

Cycle de vie des versions de Node.js

Catégories
Développement Expert

Limite le nombre de processus NodeJS

Vous avez installé un serveur NodeJS sur votre ordinateur de développement ou sur un serveur, de test ou de production. Vous avez surtout remarqué que les processus node.exe sont nombreux et consomment chacun plusieurs centaines de Mo de mémoire vive. La raison est simple : dans sa configuration par défaut, Node JS crée 1 processus par coeur de processeur. Cela signifie que si votre PC ou votre serveur est équipé d’un CPU de 8 coeurs, il y aura 8 processus node.exe qui peuvent chacun consommer 300, 350, 400, 450Mo de RAM physique, soit peut-être 5Go de RAM pour le serveur NodeJS. Sur une machine Windows ou Windows Server, il s’agit du processus node.exe de description « Node.js: Server-side JavaScript » qui est concerné.

Exemple avec une machine virtuelle équipée de 2 coeurs (VM avec 2 vCPU) :

Ce tutoriel explique comment limiter le nombre de processus serveur Node.js pour économiser la RAM (mémoire vive) d’un serveur Windows. Intéressant pour un serveur de test ou de recette, ou encore pour un développeur web ou une plateforme de R&D, cette limitation ne sera pas recommandée en environnement de production où l’on cherchera les performances maximales du hardware serveur.

Node.js est une plateforme logicielle pour les applications qui doivent pouvoir monter en charge, telle qu’une application web ou SaaS. NodeJS intègre un serveur web qui permet l’exécution de JavaScript côté serveur. Les plus grands utilisent un serveur web Node.js : PayPal, SAP, Linkedin, Groupin, Microsoft, Rakuten, Sage…

Et au contraire, on peut augmenter la quantité de mémoire vive utilisée par le serveur Nodejs.

 

Node.js : limiter la consommation mémoire vive RAM

Par défaut, il y a 1 processus NodeJS par cœur donc 300Mo de RAM x nombre de cœurs de CPU.

1. Sur le poste qui héberge Node.js, ouvrir un Invite de commandes (cmd) en tant qu’Administrateur.

2. Aller dans le dossier d’installation de Node.js, par exemple :

cd C:\nodejs\bin

3. Editer le service NSSM :

nssm edit NomService

4. A l’onglet Application, dans le champ Paramètres, rajouter « -f 1 » à la fin de la ligne pour définir un seul processus au maximum de NodeJS (espace, tiret f espace 1) :

5. Cliquer sur « Editer le service » pour enregistrer les modifications.

6. Redémarrer le serveur Nodejs pour appliquer le changement de nombre de processus.