2016-07-04 14 views
1

Meine Nodejs-App dauert eine Weile, bevor sie Anforderungen annehmen kann (Ressourcen werden kompiliert usw.).Wie kann ich "Online" -Ereignis von Cluster-Prozessen unter PM2 verzögern?

Wenn ich es im Cluster-Modus unter PM2 und Trigger-Reload ausführen, beginnt PM2 Instanzen nacheinander neu zu laden - aber es wartet nicht, bis die Anwendung tatsächlich Anfragen annehmen kann, und fährt fort, andere Instanzen neu zu starten - welche Dies führt dazu, dass alle Instanzen für einige Zeit nicht verfügbar sind.

Durch die PM2-Quelle scheint es, dass es auf "Online" -Ereignis vom Arbeitsprozess wartet, und dieses Ereignis geschieht zu früh.

Gibt es eine Möglichkeit, dieses Online-Ereignis zu verzögern, um ein normales Nachladen zu erreichen?

Hier ist der Testfall:

var http = require("http"); 

setTimeout(() => { 
    var server = http.createServer((req, res) => { 
    res.statusCode = 200; 
    res.setHeader("Content-Type", "text/plain"); 
    res.end("hello\n"); 
    }); 

    server.listen(7000, "127.0.0.1",() => { 
    console.log("server ready"); 
    }); 
}, 10000); 

beginnen mit pm2 start app -i 2, dann mit pm2 reload app Nachladen versuchen. Auf meinem Rechner ist es etwa 4s Fenster, wenn App reagiert nicht auf alle Anfragen:

curl: (7) Failed to connect to localhost port 7000: Connection refused 

(Sie bequem überwachen kann, wenn App online watch curl -sS localhost:7000 ist)

Antwort

1

Erhöhung GRACEFUL_LISTEN_TIMEOUT Wert behebt das Problem - Standardmäßig ist es auf 3 Sekunden eingestellt, was bedeutet, dass pm2 zu schnell aufgibt und zur nächsten Instanz übergeht.

Sie können den Wert wie folgt ändern:

PM2_GRACEFUL_LISTEN_TIMEOUT=15000 pm2 update