我应该在Heroku上使用prema_app和Puma吗?

Max*_*ace 9 ruby-on-rails heroku preload puma

我正在Heroku上运行一个小型Rails应用程序,其中有一个dyno和几个Puma工作者.

彪马文档说:

一般规则是当工人经常死亡并需要快速启动时使用preload_app.如果你没有很多工人,你可能不应该使用preload_app.

这表明我不应该使用preload_app!我的config/puma.rb.但是,我有一些未解答的问题:

  • 我的工人何时死亡?在一定数量的请求之后,它们会被收获并重新分叉吗?我该如何监控?
  • 我怎么知道我的工人是否需要快速启动?

很明显,preload_app!在使用许多工作人员时应该节省资源,但即使只有少量工人,我也看不到使用它的缺点.

Heroku 推荐的"简单Rails应用程序"配置包括preload_app!但不提供何时不使用它的指导.

什么时候preload_app!不应该使用,为什么?(忽略分阶段重启问题.)

dla*_*kty 3

除了快速启动工作程序之外,preload_app!还可以通过 Ruby 2.0 中引入的Copy on Write功能节省内存。

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

写入时复制(COW)是一种优化,可以减少复制时 Ruby 进程的内存占用。COW 允许多个进程共享相同的内存,直到其中一个进程需要修改一条信息,而不是在进程分叉时分配重复的内存。

因此,无论您有多少作品,始终建议preload_app!尽可能启用。