PM2 pour JavaScript (Node.js) : guide complet avec exemples
1. Qu'est-ce que PM2 et pourquoi l'utiliser ?
PM2 (Process Manager 2) est un gestionnaire de processus puissant pour les applications Node.js, conçu pour une utilisation en production. Il permet de lancer, arrêter, redémarrer et surveiller vos applications Node.js, garantissant une haute disponibilité et une tolérance aux pannes. PM2 redémarre automatiquement les processus qui échouent, répartit la charge entre plusieurs instances de l'application (clustering), intègre un répartiteur de charge et prend en charge les redémarrages sans interruption de service.
En production, les applications Node.js rencontrent souvent des erreurs inattendues, des fuites mémoire ou des surcharges. PM2 résout ces problèmes en agissant comme un « démon gardien » : il surveille l'état de chaque processus, enregistre les sorties stdout/stderr, fournit des métriques de performance (CPU, mémoire) et permet de gérer l'application via CLI ou API. Sans PM2, le développeur devrait écrire manuellement des scripts de redémarrage, de surveillance et de mise à l'échelle — PM2 automatise toutes ces tâches.
Les fonctionnalités clés de PM2 incluent : le clustering (exécution de plusieurs workers sur tous les cœurs CPU), le redémarrage sans interruption, la gestion d'environnements (development/production), la surveillance intégrée (pm2 monit), la prise en charge des fichiers de configuration (ecosystem.config.js) et l'intégration avec les systèmes d'initialisation (systemd, upstart) pour un démarrage automatique au lancement du serveur.
2. Installation
PM2 s'installe globalement via npm (Node Package Manager). La commande exacte :
npm install -g pm2
Pour installer une version spécifique :
npm install -g pm2@5.3.0
Après l'installation, vérifiez la version :
pm2 --version
3. Démarrage rapide — exemple minimal fonctionnel
Créez une application Node.js simple app.js :
// app.js
const http = require('http');
const server = http.createServer((req, res) => {
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end('Bonjour depuis PM2 !\n');
});
const PORT = process.env.PORT || 3000;
server.listen(PORT, () => {
console.log(`Serveur démarré sur le port ${PORT}`);
});
Lancez l'application via PM2 :
pm2 start app.js --name mon-app
Vérifiez le statut :
pm2 status
Arrêtez l'application :
pm2 stop mon-app
4. Méthodes/fonctions/classes principales
4.1. pm2.start() — Lancement d'une application
Signature : pm2.start(script, options, callback)
Fonction : Lance le script spécifié en tant que processus PM2 avec les options définies (nom, nombre d'instances, variables d'environnement).
Exemple de code fonctionnel :
const pm2 = require('pm2');
pm2.connect((err) => {
if (err) {
console.error(err);
process.exit(2);
}
pm2.start({
script: 'app.js',
name: 'mon-app',
instances: 2, // lancer 2 instances
exec_mode: 'cluster', // mode cluster
env: {
NODE_ENV: 'production',
PORT: 3000
}
}, (err, apps) => {
if (err) {
console.error(err);
return pm2.disconnect();
}
console.log('Application démarrée :', apps);
pm2.disconnect();
});
});
4.2. pm2.stop() — Arrêt d'un processus
Signature : pm2.stop(process, callback)
Fonction : Arrête le processus spécifié (par nom, ID ou tous les processus).
Exemple de code fonctionnel :
const pm2 = require('pm2');
pm2.connect((err) => {
if (err) {
console.error(err);
process.exit(2);
}
// Arrêter le processus nommé 'mon-app'
pm2.stop('mon-app', (err, proc) => {
if (err) {
console.error(err);
return pm2.disconnect();
}
console.log('Processus arrêté :', proc);
pm2.disconnect();
});
}); Aussi dans la bibliothèque
Travailler avec CSV en JavaScript (Node.js) : bibliothèques et outils
Files d'attente de tâches en Java : Aperçu et implémentation avec java.util.concurrent
JMH Java : guide complet avec exemples de microbenchmarking