如何在 Heroku 上的 Rails 应用程序中防止 R14 错误和交换内存使用?

How can I prevent R14 errors and swap memory usage in a Rails app on Heroku?

我的问题:
这是内存膨胀、内存泄漏还是服务器配置错误的典型例子?

首先附上内存使用截图

如你所见,我一直在使用交换内存。

此外,根据 Heroku 文档设置我的 Puma 服务器 config/puma.rb 文件后,我的内存一直处于稳定状态,然后内存增加。

我正在 运行与 0 名工人一起使用爱好测功机 1x (512 mb)。

我的 WEB_CONCURRENCY 变量设置为 1

我的RAILS_MAX_THREADS也设置为1

MIN_THREADS也设置为1

这是我的 config/puma.rb 文件

workers Integer(ENV['WEB_CONCURRENCY'] || 2)
threads_count = Integer(ENV['RAILS_MAX_THREADS'] || 5)
threads threads_count, threads_count

preload_app!

rackup      DefaultRackup
port        ENV['PORT']     || 3000
environment ENV['RACK_ENV'] || 'development'

on_worker_boot do
  # Worker specific setup for Rails 4.1+
  ActiveRecord::Base.establish_connection
end

我正在使用出轨的 gem 来测量我 gem 的内存使用情况。

我正在使用 rack-mini-profiler 和 memory_profiler 以每页为基础进行测量。

允许应用 运行 后,如下所示:

如您所见,该应用并未超出其限制。如果有人有任何有意义的建议,请随时回答问题。

上面提到的 dyno 和 puma 设置正在生成此报告。

所以,我们现在只是偶尔使用交换内存,不会超过几 MB,偶尔会达到 23 MB。该应用程序使用了很多 gem,您可以看到我们保持在 512 MB 限制以下。

我使用了 Heroku 的以下文档:
正确配置您的 puma 服务器
https://devcenter.heroku.com/articles/deploying-rails-applications-with-the-puma-web-server

对于 R14 内存错误
https://devcenter.heroku.com/articles/ruby-memory-use