2016-07-04 42 views
1

我的nodejs應用程序需要一段時間才能接受請求(資源被編譯等)。如何從pm2下的羣集進程延遲「在線」事件?

當我在pm2集羣模式下運行它並觸發重新加載時,pm2開始逐個重新加載實例 - 但它不會等到應用程序實際上能夠接受請求並繼續重新啓動其他實例 - 哪些導致所有情況下都會停滯一段時間。

翻看pm2源代碼,似乎它等待工作進程發出「在線」事件,並且該事件發生得太快。

有沒有辦法延遲這個在線事件來實現正常的重新加載?

這裏的測試用例:

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); 

開始pm2 start app -i 2,然後嘗試用pm2 reload app重裝。 在我的機器,有大約4秒窗口時,應用程序不響應請求都:

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

(你可以方便地監控,如果應用程序是watch curl -sS localhost:7000在線)

回答

1

增加GRACEFUL_LISTEN_TIMEOUT值修復該問題 - 默認情況下,它被設置爲3秒,這意味着pm2放棄太快並繼續下一個實例。

你可以改變這樣的價值:

PM2_GRACEFUL_LISTEN_TIMEOUT=15000 pm2 update