Rails中内存泄漏的主要因素

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Rails中内存泄漏的主要因素相关的知识,希望对你有一定的参考价值。

我试着用Rails解决内存泄漏问题。我可以通过New Relic看到内存的使用量在增加而不会减少。

这是一个大线程(Memory constantly increasing in Rails app)的衍生问题,我在解决这个问题时遇到了麻烦。我现在需要知道的只是:

Rails内存泄漏的主要原因/因素是什么?

据我所理解:

  • 全局变量(例如@@ variable) - 我没有这些变量
  • 符号(我没有特别创建)
  • 会议 - 在这里应该避免什么?假设我有一个会话,跟踪一个特定用户在文本搜索网站时使用的最后一个查询。我该怎么杀掉它?
  • “留下参考资料” - 这究竟意味着什么?你举个例子吗?
  • 您可以提供的任何其他错误的编码示例通常会造成内存泄漏?

我想用这些信息来查看我的代码,所以请提供示例!

最后,这会是“内存泄漏代码”吗?

ProductController
...
@last_products << Product.order("ASC").limit(5)
end

这会让@last_products膨胀吗?

答案

以下将破坏应用程序。

Foo.each do |bar|
  #Whatever
end

如果你有很多Foos会将它们全部记入内存中。我看到应用程序爆炸,因为他们有一堆“Foos”,他们有一个rake任务贯穿所有的foos,这个rake任务需要永远,让我们说Y秒,但是每X秒运行一次,其中X <是的。所以会发生的事情是他们现在已经拥有了所有Foos,不止一次,因为他们只是一遍又一遍地把东西拉进记忆中。

虽然这不能完全发生在面向前方的Web应用程序中,但它不是完全有效或想要的。

而不是上面做了以下

Foo.find_each do |bar|
  #Whatever
end

它可以检索事物和批次,并且不会立即将大量内容放入您的记忆中。

就在我完成打字的时候,我意识到这个问题在去年9月被问到了......哦,男孩......

以上是关于Rails中内存泄漏的主要因素的主要内容,如果未能解决你的问题,请参考以下文章

ruby/ruby on rails 内存泄漏检测

在 Ruby 中查找内存泄漏的原因

避免android片段中内存泄漏的最佳方法是啥

在 Rails 应用程序中查找内存泄漏

FragmentStatePagerAdapter 内存泄漏(带有 viewpager 的嵌套片段)

将 Rails 5.2 升级到 6.0.0 后内存泄漏