微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何通过 pm2 重新启动节点应用程序并应用新的配置文件?

如何解决如何通过 pm2 重新启动节点应用程序并应用新的配置文件?

我有一个在 Ubuntu 18.04 上运行的节点应用程序。它是这样开始使用 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 的 max-old-space-size 文件ecosystem.config.js 参数传递给节点。所以我继续将这个配置文件添加到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 中删除我的 APP,然后使用 ecosystem.config.js 文件重新启动它。这两个命令就是我所需要的:

pm2 delete web_server
pm2 start ecosystem.config.js 

最后一个命令将启动 ./bin/web_server.js 并应用所有指定的参数。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。