javascript - 如何延迟 pm2 下集群进程的 "online"事件?

标签 javascript node.js pm2

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

当我在集群模式下在 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方便地监控应用程序是否在线)

最佳答案

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

您可以像这样更改值:

PM2_GRACEFUL_LISTEN_TIMEOUT=15000 pm2 update

关于javascript - 如何延迟 pm2 下集群进程的 "online"事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38188389/

相关文章:

asp.net - 使用 javascript 为单个 aspage 上的多个实例启用/禁用表

c++ - 使用 node-nan 在 node.js 模块中设置 WindowsHookEx

node.js - 如何使用 formData.append() 在对象数组中发送文件

linux - socket - 事件套接字的最大限制

node.js - 如何用WebSockets、Nodejs实现PM2集群

javascript - 为什么我的正则表达式不能与 Validators.pattern 一起使用?

javascript - 如何隐藏/禁用 videojs 中的按钮控件?

javascript - 使用 jQuery 在预制/单独页面之间滑动

node.js - 在 Node.js 脚本中完成 Cassandra 后,我真的需要调用 client.shutdown() 吗?

mysql - Sequelize/express 和 AWS RDS 连接过多