【发布时间】: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 连接的超时有关,但我仍在调查此问题。
【问题讨论】: