【发布时间】:2020-12-03 13:13:53
【问题描述】:
编辑: 事实证明,所描述的情况不是内存消耗的根本原因。因此,我将关闭这个。很抱歉给您带来不便。
我正在使用 rails_admin 来管理数据库中的数据。
我在两个表之间存在 n 对 m 关系,这导致 rails_admin 应用程序为我要编辑的每个唯一 n 占用多达 150MB 的额外内存。
不用说,这很糟糕,感觉我做错了什么。
这是我的分支表:
class Branch < ApplicationRecord
has_and_belongs_to_many :plant_state_bit_alarm,
class_name: 'Alarm',
join_table: :plant_state_bit_alarms
# ...
edit do
# this causes the memory "hogging" - If I don't filter, it will hog anyway
field :plant_state_bit_alarm do
associated_collection_scope do
branch = bindings[:object]
Proc.new { |scope| scope = scope.where(branch_id: branch.id) if branch.present? }
end
end
end
报警表:
class Alarm < ApplicationRecord
belongs_to :branch
end
还有中间表:
class PlantStateBitAlarm < ApplicationRecord
belongs_to :alarm
belongs_to :branch
rails_admin do
visible false
end
end
我的数据库中只有两个分支,但我的数据库中有许多警报(每个分支大约 35k)。当我想编辑任一分支时,应用程序的内存达到 700 MB 并且永远不会自行减少,导致生产服务器使用 OOM 杀手杀死我的应用程序。
现在有一个非常小的内存限制 (256MB),超过了我想要编辑其中一个分支的那一刻。我可以扩展它,但我担心它会成为我未来的问题,所以我宁愿现在就修复它。
我愿意接受处理此问题的建议,但我对 rails_admin 的了解仅涵盖 wiki 页面,这似乎更奇怪。我最担心的是内存根本没有被释放。
一些版本信息:
- 红宝石:2.6.3
- 导轨:5.0.7.2
- rails_admin:1.4.2
(更新 rails 和 rails_admin 没有显示任何变化)
【问题讨论】:
标签: ruby-on-rails ruby memory rails-admin