如果应用程序崩溃,heroku 是不是会重新启动 NodeJS 服务器

Posted

技术标签:

【中文标题】如果应用程序崩溃,heroku 是不是会重新启动 NodeJS 服务器【英文标题】:Does heroku restart NodeJS server if application crashes如果应用程序崩溃,heroku 是否会重新启动 NodeJS 服务器 【发布时间】:2013-10-16 10:33:41 【问题描述】:

我们在 Heroku 上运行 NodeJS 服务器。我们想知道如果应用程序崩溃,heroku 是否会重新启动应用程序。另外免费版和付费版会有什么不同的行为吗?

【问题讨论】:

【参考方案1】:

会的。几次,然后“冷却”十分钟再试一次。来自文档:

Heroku 的测功机重启策略是通过每十分钟生成一次新的测功机来尝试重新启动崩溃的测功机。这意味着如果您推送阻止您的应用程序启动的错误代码,您的应用程序 dynos 将启动一次,然后重新启动,然后冷却十分钟。在长时间运行的网络或工作进程偶尔崩溃的正常情况下,测功机将立即重新启动,而无需您进行任何干预。如果您的测功机连续两次崩溃,它将在系统重试之前保持停机十分钟。

文档:https://devcenter.heroku.com/articles/dynos#automatic-dyno-restarts

编辑关于免费测功机:重启行为是相同的。然而,有一种叫做“Dyno Idling”的东西只发生在免费的测功机中。基本上这意味着如果您的测功机在 1 小时内没有收到任何请求,它将“进入睡眠状态”,并且下一个请求将“唤醒它”,这将导致下一个请求稍微延迟。仅当您的应用有 1 个免费的 web dyno 时才会发生这种情况。

为了避免这种情况,要么有 2 个测功机(然后 没有一个 会闲置,但你会为一个付费),或者每(比如)30 个“某事”轮询你的网络测功机分钟。比如说 pingdom。

文档:https://devcenter.heroku.com/articles/dynos#automatic-dyno-restarts

【讨论】:

你的意思是,它会立即重启服务器。它是否支持免费测功机?因为我们的应用程序没有重新启动。我不明白连续两次。有没有连续两次的具体时间? 它也是免费计划的,是的。两次意味着它将重新启动一次,如果仍然失败则等待10分钟再重新启动。我将编辑我的答案以反映免费层的更多信息。 你说,如果5分钟没有请求,它就会空闲。不是5分钟,是1小时。关于免费计划重启功能,它对我们不起作用。你确定吗? 我已经发布了我的 heroku 日志。 pastebin.com/bhfyct1L 这里服务器由于 mongo db 连接问题而崩溃。然后所有请求都返回超时错误。 1 小时后,服务器进入空闲状态。 更正 5m/1h。我将编辑我的答案。但是,从日志来看,它确实 not 看起来好像您的进程在连接失败后退出了。似乎您在uncaughtException 中有某种代码可以防止您的进程退出。这就是 Heroku 没有重新启动它的原因。

以上是关于如果应用程序崩溃,heroku 是不是会重新启动 NodeJS 服务器的主要内容,如果未能解决你的问题,请参考以下文章

完美的工作Heroku应用程序崩溃,无法重新启动

如何在heroku上重新启动rails应用程序

Heroku:每次测功机重新启动时都会丢失 Django 数据库文件

如果应用程序崩溃一次,我无法启动应用程序,除非我重新启动我的 Android 手机

部署到 Heroku 时 Django 应用程序崩溃 - Worker 无法启动

在 Heroku 上,在实例已经使用更改的模型代码重新启动后,Django syncdb / South 迁移是不是存在危险?