node.js - 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 不会抱怨。
解决方案
我们遇到了同样的问题。这是由于 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/.pm2
。pidusage
考虑到前面提到的问题,这让我们尽可能地接近工作。
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",
},
},
],
};
推荐阅读
- python - 如何用非常大的数据集训练分类器?
- r - 将多个分组索引合并为一个
- azure - Cosmos DB - Microsoft.Azure.Documents.AddressResolver.EnsureRoutingMapPresent
- kubernetes - 当使用带有路径重定向的 nginx kubernetes 路由 LoadBalancer 时,为什么我无法正确访问我的服务?
- azure-logic-apps - 获取 Azure 逻辑应用表达式中的最大时间戳
- sql - PL/SQL:什么是错误:ORA-04082:表级触发器中不允许新或旧引用
- javascript - 将给定的字符串分成相等的部分,其中子字符串的数量将具有相同的大小和动态性质?
- mysql - 谁能帮我解决这个 SQL 函数中的错误
- javascript - ASP.NET 在 jQuery Bundle 上接收 NullReferenceException
- loadrunner - LoadRunner Controller:需要拆分参数文件