如何通过 pm2 重启节点应用程序并应用新的配置文件?
How to restart a node app via pm2 and apply new config file?
我在 Ubuntu 18.04 上有一个节点应用 运行ning。它是这样开始使用 PM2 pm2 start ./bin/web_server.js
在某些情况下,进程 运行 内存不足并引发此错误:
FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory
1: 0xa18150 node::Abort() [node /path/to/app/bin/web_server.js]
2: 0xa1855c node::OnFatalError(char const*, char const*) [node /path/to/app/bin/web_server.js]
...
...
所以我想增加堆大小,这对于节点进程来说似乎非常简单。只需 运行 使用适当的参数集即可。例如node --max-old-space-size=2048 ./bin/web_server.js
因为我已经运行使用 PM2 设置我的进程,所以我想使用 PM2 的 ecosystem.config.js
文件将 max-old-space-size
参数传递给节点。所以我继续将这个配置文件添加到APP的根目录中。内容在这里:
module.exports = {
apps : [{
name: 'IntuListAPI',
script: './bin/web_server.js',
//watch: true,
//watch_delay: 1000,
max_memory_restart: '20G',
node_args: [
"--max-old-space-size=6144"
]
}]
};
现在,当我 运行 pm2 restart web_server
时,我希望 PM2 获取新配置并使用它重新启动我的进程。但它似乎不起作用,我不明白为什么。原来是没有ecosystem.config.js
启动的,现在是不是忽略了?
可以肯定的是,进程重新启动很好,只是没有以新的堆大小重新启动。
经过进一步研究,我了解到为了完成此操作,我必须从 pm2 中删除我的应用程序,然后使用 ecosystem.config.js
文件重新启动它。这两个命令就是我所需要的:
pm2 delete web_server
pm2 start ecosystem.config.js
最后一条命令将启动 ./bin/web_server.js
并应用所有指定的参数。
我在 Ubuntu 18.04 上有一个节点应用 运行ning。它是这样开始使用 PM2 pm2 start ./bin/web_server.js
在某些情况下,进程 运行 内存不足并引发此错误:
FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory
1: 0xa18150 node::Abort() [node /path/to/app/bin/web_server.js]
2: 0xa1855c node::OnFatalError(char const*, char const*) [node /path/to/app/bin/web_server.js]
...
...
所以我想增加堆大小,这对于节点进程来说似乎非常简单。只需 运行 使用适当的参数集即可。例如node --max-old-space-size=2048 ./bin/web_server.js
因为我已经运行使用 PM2 设置我的进程,所以我想使用 PM2 的 ecosystem.config.js
文件将 max-old-space-size
参数传递给节点。所以我继续将这个配置文件添加到APP的根目录中。内容在这里:
module.exports = {
apps : [{
name: 'IntuListAPI',
script: './bin/web_server.js',
//watch: true,
//watch_delay: 1000,
max_memory_restart: '20G',
node_args: [
"--max-old-space-size=6144"
]
}]
};
现在,当我 运行 pm2 restart web_server
时,我希望 PM2 获取新配置并使用它重新启动我的进程。但它似乎不起作用,我不明白为什么。原来是没有ecosystem.config.js
启动的,现在是不是忽略了?
可以肯定的是,进程重新启动很好,只是没有以新的堆大小重新启动。
经过进一步研究,我了解到为了完成此操作,我必须从 pm2 中删除我的应用程序,然后使用 ecosystem.config.js
文件重新启动它。这两个命令就是我所需要的:
pm2 delete web_server
pm2 start ecosystem.config.js
最后一条命令将启动 ./bin/web_server.js
并应用所有指定的参数。