【问题标题】:Rails 5.2.4: How to reduce RAM use?Rails 5.2.4:如何减少 RAM 使用?
【发布时间】:2020-04-07 22:46:57
【问题描述】:

我的 AWS 积分即将到期,因此我想通过剥离非必要功能和 gem 将我的应用程序的 RAM 使用量减少到 512mb。到目前为止,我剩下的宝石是:

gem 'rails', '~> 5.2.4'
gem 'sass-rails', '~> 5.0'
gem 'jbuilder', '~> 2.5'
gem 'rack-cors', require: 'rack/cors'
gem 'devise', github: 'plataformatec/devise'
gem 'turbolinks', '~> 5'
gem 'chart'
gem 'font-awesome-sass'
gem 'friendly_id'
gem 'geocoder'
gem 'pg'
gem 'pg_search'
gem 'simple_form'
gem 'puma'
gem 'jquery-rails'
gem 'bootstrap'
gem 'uglifier', '>= 1.3.0'
gem 'omniauth-facebook'
gem 'omniauth-google-oauth2'
gem 'pagy'
gem 'sucker_punch'

我从Rails 6+ 降级到Rails 5.2.4passengerpumadelayed_jobssucker_punchkaminaripagy。我尝试切换到bulma,但在移动设备上出现问题。

我仍然想进一步减少内存。

该应用有 200 个表格。减少模型数量并在查询中使用 .pluck 是否有助于减少 RAM 使用?

是否需要uglifiersass-rails

移除诸如mapbox和其他css之类的js依赖是否也会减少RAM使用?

【问题讨论】:

  • 你需要告诉我们你发现了什么,在你的应用程序中什么东西占用你的内存最多。如果你没有尝试过调试,那么调试是你想要优化时首先要做的事情。删除所有内容不是很实用。查看此 gem github.com/schneems/get_process_mem 并尝试先弄清楚您的实际内存使用情况。

标签: ruby-on-rails ruby-on-rails-5


【解决方案1】:

是否需要 uglifier 和 sass-rails?

如果您在项目中不使用 sass,则可以删除 sass-rails。但我看到你有 font-awesome-sass gem。

Uglifier 仅在编译资产时使用,因此您的 css 和 js 文件更小。

该应用有 200 个表格。减少模型数量并在查询中使用 .pluck 是否有助于减少 RAM 使用?

Rails 会自动加载您的代码,但我怀疑模型的数量是否会对内存的使用产生重大影响。另一方面,当您从数据库中读取一条记录时,如果您有一个包含数百条记录的表并且您只需一次加载所有记录(User.all.to_aUser.all.each ) 它需要大量内存,但仅在特定时刻。通常pluck 是使用更少内存的好方法,因为您只获取所需值的数组,而不是在不需要它们时完成 AR 对象。

移除 js 依赖项,如 mapbox 和其他 css 是否也会减少 RAM 使用?

我不这么认为,资产编译的时候用到了js依赖。

如果您使用多个线程来释放一些 ram 的一个好技巧是使用 jemalloc 而不是标准 malloc 进行内存分配https://www.youtube.com/watch?v=4_yxbh9Enoc

您可以做的另一件事是仅加载您实际使用的 rails 模块。在您的 config/application.rb 文件中,您将看到类似 require 'rails/all' 的行,它加载了所有 rails 功能 https://github.com/rails/rails/blob/master/railties/lib/rails/all.rb

您可以更改该行以仅导入您想要的功能,例如,如果您不使用 action_cable 或 active_job,您可以只导入其余部分。

您可以做的另一件事是删除与第三方 js 和 css 相关的 gem,例如 bootstrap、font-awesome、jquery,并使用 yarn 来处理 js 和 css 的依赖关系。不过,您可能会丢失这些 gem 提供的一些视图助手。

【讨论】:

  • 谢谢!我会试试jemalloc。我删除了test_unit 并做了更多的采摘,但保留了我的模型。我还保留了sass-rails,因为通过 yarn 重新配置每个 js 的工作量更大。我还删除了不需要的逻辑,因此它们不会自动加载到内存中。
  • 为了预编译,我添加了交换空间:stackoverflow.com/questions/22272339/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-07
相关资源
最近更新 更多