我怎样才能延迟"在线"来自pm2下的集群进程的事件?

时间:2016-07-04 15:42:31

标签: javascript node.js pm2

我的nodejs app需要一段时间才能接受请求(资源被编译等)。

当我在群集模式下在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重新加载。 在我的机器上,当应用程序根本不响应请求时,大约有4s窗口:

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

(您可以通过watch curl -sS localhost:7000

方便地监控应用是否在线

1 个答案:

答案 0 :(得分:1)

增加GRACEFUL_LISTEN_TIMEOUT值可修复问题 - 默认情况下,它设置为3秒,这意味着pm2放得太快并继续下一个实例。

您可以像这样更改值:

PM2_GRACEFUL_LISTEN_TIMEOUT=15000 pm2 update