【问题标题】:pm2 reload ecosystem.config.js causing many restarts on applicationpm2 重新加载生态系统.config.js 导致应用程序多次重启
【发布时间】:2019-04-26 04:13:33
【问题描述】:

我在使用生态系统.config.js 文件重新加载应用程序时遇到问题。当应用程序第一次启动时,它可以正确启动,但是当我使用生态系统.config.js 文件刷新/重新加载应用程序时,应用程序会重新启动几次导致错误。

我的 SO 是 Ubuntu Xenial,PM2 版本是 3.2.2 和 Node v10.13.0。该应用程序使用 Express 模块 (4.16.4) 的最新版本。 如果我使用“pm2 reload app_name”重新加载应用程序,则不会出现此问题。

生态系统.config.js 内容:

module.exports = {
  apps: [{
     script: "./index.js",
     instances: "max",
     exec_mode: "cluster",
     kill_timeout: "2000",
     env: {
       NODE_ENV: "development",
     },
     env_production: {
       NODE_ENV: "production",
     }
  }]
}

当我第一次运行时:

$ pm2 重新加载生态系统.config.js

[PM2][WARN] 应用程序索引未运行,正在启动...

[PM2] 应用 [index] 启动(2 个实例)

node@ubuntu:/data/$ pm2 日志

[TAILING] 拖尾 [all] 进程的最后 15 行(使用 >--lines 选项更改值)

/home/node/.pm2/pm2.log 最后 15 行:

PM2 | 2018-11-23T13:14:30:PM2 日志:应用程序 [index:0] 从 -cluster >mode-

开始

PM2 | 2018-11-23T13:14:31:PM2 日志:App [index:0] 在线

PM2 | 2018-11-23T13:14:31:PM2 日志:应用程序 [index:1] 从 -cluster >mode-

开始

PM2 | 2018-11-23T13:14:31:PM2 日志:App [index:1] 在线

当我按名称重新加载应用程序时(例如:pm2 reload app_name),应用程序继续运行,但我看到一些超时以终止进程:

PM2 | 2018-11-23T14:01:02: PM2 日志: pid=11296 msg=failed to kill - 100ms 后重试 PM2 | 2018-11-23T14:01:02: PM2 日志: PID 11289 的进程在 6000 毫秒后仍然存在,现在发送 SIGKILL... PM2 | 2018-11-23T14:01:02: PM2 日志: pid=11296 msg=failed to kill - 100ms 后重试 PM2 | 2018-11-23T14:01:02: PM2 日志: pid 11296 的进程在 6000 毫秒后仍然存在,现在发送 SIGKILL... PM2 | 2018-11-23T14:01:02:PM2 日志:应用程序名称:索引 ID:_old_0 已断开连接 PM2 | 2018-11-23T14:01:02:PM2 日志:应用程序 [index:_old_0] 通过信号 [SIGKILL] 以代码 [0] 退出 PM2 | 2018-11-23T14:01:02:PM2 日志:应用程序名称:索引 ID:_old_1 已断开连接 PM2 | 2018-11-23T14:01:02:PM2 日志:应用程序 [index:_old_1] 通过信号 [SIGKILL] 以代码 [0] 退出 PM2 | 2018-11-23T14:01:02:PM2 日志:pid=11289 msg=进程被杀死 PM2 | 2018-11-23T14:01:02:PM2 日志:pid=11296 msg=进程被杀

但是,即使发生超时,应用程序仍在运行。

当我执行“pm2 reloadecosystem.config.js”时,PM2多次重启应用,一个实例失败:

0|索引 |在 Module.load (internal/modules/cjs/loader.js:598:32)

0|索引 |在 tryModuleLoad (internal/modules/cjs/loader.js:537:12)

0|索引 |在 Function.Module._load (internal/modules/cjs/loader.js:529:3)

0|索引 |在对象。 (/usr/lib/node_modules/pm2/lib/ProcessContainerFork.js:48:21)

0|索引 |错误:监听 EADDRINUSE :::3001

我认为问题与正确终止 Express 模块的 http 连接的超时有关,但我仍在调查此问题。

【问题讨论】:

    标签: node.js express pm2


    【解决方案1】:

    PM2最新版本已修复,请更新:

    npm install pm2@latest -g pm2更新

    确保您pm2 delete all 然后重新启动您的应用程序,它会在重新加载或重新启动时工作

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-22
      • 1970-01-01
      • 2019-03-23
      • 2022-08-06
      • 1970-01-01
      相关资源
      最近更新 更多