【问题标题】:Should I use preload_app with Puma on Heroku?我应该在 Heroku 上使用 preload_app 和 Puma 吗?
【发布时间】:2015-12-03 12:24:24
【问题描述】:

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

Puma docs 说:

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

这表明我不应该在我的config/puma.rb 中使用preload_app!。但是,我有几个未回答的问题:

  • 我的工人什么时候死?他们会在一定数量的请求后被收割并重新分叉吗?我怎样才能监控这个?
  • 我如何知道我的员工是否需要快速启动?

很明显preload_app!在使用大量worker时应该会节省资源,但我看不出即使使用少量worker也有缺点。

Heroku 的“一个简单的 Rails 应用程序”recommended config 包括 preload_app!,但他们没有提供关于何时不使用它的任何指导。

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

【问题讨论】:

  • 我有同样的问题,我的 google fu 没有发现任何额外的东西。

标签: ruby-on-rails heroku preload puma


【解决方案1】:

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

你可以阅读这篇 great write-up from Heroku 介绍 Ruby 中写时复制的概念:

Copy on Write 或 COW 是一种优化,可以减少 Ruby 进程在复制时的内存占用。 COW 不会在进程被派生时分配重复的内存,而是允许多个进程共享相同的内存,直到其中一个进程需要修改一条信息。

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

【讨论】:

    猜你喜欢
    • 2015-03-25
    • 2016-03-17
    • 2017-05-23
    • 1970-01-01
    • 2012-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-23
    相关资源
    最近更新 更多