Introduction

En production, la montée en charge d’une API Node.js peut rapidement révéler des goulets d’étranglement CPU ou mémoire. PM2, gestionnaire de processus populaire, associé au clustering natif de Node.js, permet de maximiser l’utilisation des cœurs CPU, d’assurer une haute disponibilité et de faciliter le reload zéro downtime. Dans ce guide, vous découvrirez pas à pas comment déployer et optimiser votre API Node.js avec PM2 en mode cluster.

1. Installer et configurer PM2

  1. Installation globale
    npm install -g pm2@latest
  2. Initialiser votre application
    pm2 init simple

    Cela crée un fichier ecosystem.config.js de base.

  3. Configurer le mode cluster
    module.exports = {
      apps: [{
        name: "my-api",
        script: "server.js",
        instances: "max",
        exec_mode: "cluster",
        autorestart: true,
        watch: false,
        max_memory_restart: "200M"
      }]
    };

    – instances: "max" utilise tous les cœurs CPU disponibles. – max_memory_restart redémarre automatiquement en cas de fuite mémoire.

2. Lancer et superviser votre cluster

  1. Démarrage en mode production
    pm2 start ecosystem.config.js --env production
  2. Vérifier l’état des processus
    pm2 list

    Obtenez CPU, mémoire et statut de chaque worker.

  3. Logs en temps réel
    pm2 logs my-api --lines 100
  4. Reload zéro downtime
    pm2 reload my-api

    Déploiement sans interruption de service.

Exemple de métriques après clustering

WorkerCPU (%)Mémoire (MB)
01245
11547
21142
31344

3. Bonnes pratiques et optimisations avancées

  • Gestion de la mémoire : ajustez max_memory_restart selon vos tests de charge.
  • Monitoring externe : intégrez Docker + AI Monitoring (Prometheus, Grafana) pour alertes et dashboards.
  • Logs structurés : utilisez pm2 install pm2-logrotate pour faire pivoter vos logs et éviter l’épuisement du disque.
  • Cluster + Load Balancer : placez un Nginx en front pour répartir la charge et gérer le SSL (voir configuration).
  • Mises à jour canary : déployez progressivement en combinant pm2 reload --only my-api --update-env avec un reverse proxy.

4. Erreurs fréquentes et astuces

  • “Process out of memory” : augmentez max_memory_restart ou réduisez le nombre d’instances.
  • “Port already in use” : vérifiez que chaque worker écoute sur le même port en mode cluster (Node.js le gère automatiquement).
  • “Crash Loop” : activez restart_delay pour éviter les redémarrages en boucle :
    restart_delay: 5000

Conclusion

Mettre en place PM2 en mode cluster permet de tirer parti de tous vos cœurs CPU, d’améliorer la résilience et de simplifier vos déploiements en production. En combinant ces techniques avec un monitoring adapté, vous garantissez un service rapide et disponible pour vos utilisateurs. Pour aller plus loin, découvrez nos expertises en Node.js et en renfort technique chez Novane.

Prêt à booster vos performances Node.js ? Contactez-nous pour un audit personnalisé.