首页 > 解决方案 > PM2 在谷歌应用引擎上不断重启

问题描述

当我使用 PM2 v 3.5.0 在本地运行我的应用程序时一切正常,但是当我将它部署在 Google GCP 应用程序引擎 Flex 环境中时,PM2 不断重启应用程序。

这是我的 PM2 配置文件

{
  "apps": [{
    "name"        : "prod_client",
    "script"      : "./bin/www",
    "exec_mode": "cluster_mode",
    "instances": 1,
    "watch"       : false,
    "env": {
      "NODE_ENV": "production"
    }
    },{
    "name"       : "prod_api",
    "script"     : "./src/server/apiServer.js",
    "exec_mode": "cluster_mode",
    "instances": 1,
    "watch"       : false,
    "env": {
      "NODE_ENV": "production"
    }
  }]
}

有趣的是,我没有得到任何适当的有用日志。请注意,在本地机器上一切正常,PM2 不会抱怨。

标签: node.jsexpressgoogle-app-enginegoogle-cloud-platformpm2

解决方案


我们遇到了同样的问题。这是由于 PM2 试图将文件写入存储,而 Google AppEngine (GAE) 通常不支持(更多内容将在此讨论)。此外,我们还没有让它完全工作,因为遗憾的是pidusage,GAE 上的内存检查命令存在问题,尚未解决[1]

因此,为了最初解决这个问题,我们使用配置将日志记录和 pidfile 路径分别重定向到/dev/stdout/dev/null。这让 PM2 工作了,但它仍然不能正常工作。例如,它正在努力读取 pidfile。

但是,GAE 确实允许使用 tmp 文件(我们使用的是 Standard,但我想 Flex 也有类似的支持)[2]。因此,我们删除了 pidfile 配置,而是将start脚本更改为 set PM2_HOME=/tmp/.pm2pidusage考虑到前面提到的问题,这让我们尽可能地接近工作。

PM2_HOME=/tmp/.pm2 pm2 start ecosystem.config.js --env production --no-daemon --mini-list

配置ecosystem.config.js类似于:

module.exports = {
    apps: [
        {
            name: "service",
            script: "main.js",
            kill_timeout: 15000,
            max_memory_restart: "400M",
            exec_mode: "cluster",
            instances: 1,
            out_file: "/dev/stdout",
            error_file: "/dev/stderr",
            env: {
                NODE_ENV: "development",
                BLAH: "1",
            },
            env_production: {
                NODE_ENV: "production",
                BLAH: "0",
            },
        },
    ],
};

推荐阅读