我在使用生态系统.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重新加载ecosystem.config.js
[PM2] [WARN]应用程序索引未运行,正在启动...
[PM2]应用[索引]已启动(2个实例)
node @ ubuntu:/ data / $ pm2日志
[TAILING]拖尾[所有]进程的最后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日志:应用[索引:1]从-cluster> mode-
开始PM2 | 2018-11-23T13:14:31:PM2日志:App [索引:1]在线
当我按名称重新加载应用程序(例如:pm2 reload app_name)时,应用程序会继续运行,但是我看到一些超时会终止进程:
PM2 | 2018-11-23T14:01:02:PM2日志:pid = 11296 msg =无法终止-在100毫秒内重试 PM2 | 2018-11-23T14:01:02:PM2日志:进程pid为11289的进程在6000ms之后仍然存在,现在将其发送给SIGKILL ... PM2 | 2018-11-23T14:01:02:PM2日志:pid = 11296 msg =无法终止-在100毫秒内重试 PM2 | 2018-11-23T14:01:02:PM2日志:进程pid为11296的进程在6000ms之后仍然存在,现在将其发送给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 reload生态系统.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连接有些超时有关,但是我仍在对此进行调查。
答案 0 :(得分:0)
该问题已在最新的PM2版本上修复,请更新:
npm install pm2 @ latest -g pm2更新
请确保您pm2 delete all
,然后再次重新启动您的应用程序,然后在重新加载或重新启动时它将正常工作