【问题标题】:How to restart a node app via pm2 and apply new config file?如何通过 pm2 重新启动节点应用程序并应用新的配置文件?
【发布时间】:2021-04-21 13:23:55
【问题描述】:

我有一个在 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 的 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,现在是忽略了吗?

可以肯定的是,进程重新启动就好了,只是不会以新的堆大小重新启动。

【问题讨论】:

    标签: node.js pm2


    【解决方案1】:

    经过进一步研究,我了解到为了完成此操作,我必须从 pm2 中删除我的 APP,然后使用 ecosystem.config.js 文件重新启动它。我只需要这两个命令:

    pm2 delete web_server
    pm2 start ecosystem.config.js 
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-08-06
      • 1970-01-01
      • 1970-01-01
      • 2018-01-31
      • 2018-10-03
      • 1970-01-01
      • 2020-03-18
      • 1970-01-01
      相关资源
      最近更新 更多