PM2 für JavaScript (Node.js): Vollständige Anleitung mit Beispielen
1. Was ist PM2 und warum wird es benötigt?
PM2 (Process Manager 2) ist ein leistungsstarker Prozessmanager für Node.js-Anwendungen, der speziell für den Einsatz in der Produktion entwickelt wurde. Er ermöglicht das Starten, Stoppen, Neustarten und Überwachen von Node.js-Anwendungen und sorgt für hohe Verfügbarkeit und Ausfallsicherheit. PM2 startet abgestürzte Prozesse automatisch neu, verteilt die Last auf mehrere Instanzen (Clustering), bietet einen integrierten Load-Balancer und unterstützt unterbrechungsfreie (graceful) Neustarts ohne Ausfallzeiten.
In der Produktion treten bei Node.js-Anwendungen häufig unerwartete Fehler, Speicherlecks oder Überlastungen auf. PM2 löst diese Probleme, indem es als „Wächter-Daemon“ fungiert: Es überwacht den Zustand jedes Prozesses, protokolliert stdout/stderr, liefert Leistungsmetriken (CPU, Speicher) und ermöglicht die Verwaltung über die CLI oder API. Ohne PM2 müssten Entwickler manuell Skripte für Neustarts, Überwachung und Skalierung schreiben – PM2 automatisiert all diese Aufgaben.
Zu den wichtigsten Funktionen von PM2 gehören: Clustering (Ausführung mehrerer Worker auf allen CPU-Kernen), unterbrechungsfreie Neustarts, Umgebungsverwaltung (Development/Production), integriertes Monitoring (pm2 monit), Unterstützung von Konfigurationsdateien (ecosystem.config.js) und die Integration mit Init-Systemen (systemd, upstart) für den automatischen Start beim Server-Hochfahren.
2. Installation
PM2 wird global über npm (Node Package Manager) installiert. Der genaue Befehl lautet:
npm install -g pm2
So installieren Sie eine bestimmte Version:
npm install -g pm2@5.3.0
Überprüfen Sie nach der Installation die Version:
pm2 --version
3. Schnellstart – Minimales Arbeitsbeispiel
Erstellen Sie eine einfache Node.js-Anwendung app.js:
// app.js
const http = require('http');
const server = http.createServer((req, res) => {
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end('Hallo von PM2!\n');
});
const PORT = process.env.PORT || 3000;
server.listen(PORT, () => {
console.log(`Server läuft auf Port ${PORT}`);
});
Starten Sie die Anwendung mit PM2:
pm2 start app.js --name my-app
Überprüfen Sie den Status:
pm2 status
Stoppen Sie die Anwendung:
pm2 stop my-app
4. Wichtige Methoden/Funktionen/Klassen
4.1. pm2.start() – Anwendung starten
Signatur: pm2.start(script, options, callback)
Funktion: Startet das angegebene Skript als PM2-Prozess mit den definierten Optionen (Name, Anzahl der Instanzen, Umgebungsvariablen).
Arbeitsbeispiel:
const pm2 = require('pm2');
pm2.connect((err) => {
if (err) {
console.error(err);
process.exit(2);
}
pm2.start({
script: 'app.js',
name: 'my-app',
instances: 2, // 2 Instanzen starten
exec_mode: 'cluster', // Cluster-Modus
env: {
NODE_ENV: 'production',
PORT: 3000
}
}, (err, apps) => {
if (err) {
console.error(err);
return pm2.disconnect();
}
console.log('App gestartet:', apps);
pm2.disconnect();
});
});
4.2. pm2.stop() – Prozess stoppen
Signatur: pm2.stop(process, callback)
Funktion: Stoppt den angegebenen Prozess (nach Name, ID oder alle Prozesse).
Arbeitsbeispiel:
const pm2 = require('pm2');
pm2.connect((err) => {
if (err) {
console.error(err);
process.exit(2);
}
// St