我应该在Heroku上使用Puma的preload_app吗?

9
我在Heroku上运行一个小型的Rails应用程序,有一个动态进程和几个Puma工作进程。 Puma文档中说:
一般规则是当您的工作进程经常死亡且需要快速启动时使用preload_app。如果您没有很多工作进程,您可能不应该使用preload_app。
这表明我不应该在我的config/puma.rb中使用preload_app!。然而,我还有一些未解答的问题:
  • 我的工作进程何时死亡?它们将在一定数量的请求后被收回并重新fork吗?我如何监控这个过程?
  • 我怎么知道我的工作进程需要快速启动?
很明显,preload_app!在使用许多工作进程时应该节省资源,但即使只有少量工作进程,我也看不出使用它的缺点。
Heroku对于“一个简单的Rails应用程序”的推荐配置包括preload_app!,但他们没有提供任何关于何时不使用它的指导。(忽略分阶段重启问题),那么什么时候不应该使用preload_app!,为什么?

1
我有同样的问题,我的谷歌搜索也没有找到任何额外的信息。 - Graeme
1个回答

3
除了能够快速启动工作进程外,preload_app! 还由于 Ruby 2.0 引入的 Copy on Write 特性,可以节省内存。

您可以阅读 Heroku 的这篇优秀文章,介绍了 Ruby 中的写时复制思想:

写时复制或 COW 是一种优化方式,当复制一个 Ruby 进程时,它可以减少其内存占用。在进程被 fork 时,COW 不会分配重复的内存,而是允许多个进程共享相同的内存,直到其中一个进程需要修改某个信息为止。

因此,无论您有多少个工作进程,如果可能的话,始终建议启用 preload_app!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接