ruby-on-rails - 我怎样才能找到 Heroku 上的内存泄漏?

标签 ruby-on-rails ruby heroku ruby-on-rails-3.2 ruby-1.9.3

我有一个 Rails 3.2.8 应用程序在 Heroku Cedar 上运行,使用 Ruby 1.9.3。该应用程序启动时运行良好,但在连续使用一天左右后,我开始在我的日志中看到 R14 错误。一旦出现内存错误,它们就永远不会消失,即使应用闲置几个小时也是如此。

垃圾收集器不应该过一段时间就清理不用的对象,减少内存负载吗?这似乎在 Heroku 上没有发生。通常,在运行一些包含几千行数据的报告后,内存使用量开始逐渐增加,尽管结果是分页的。

如何找到内存泄漏?像 bleak_house 这样的插件已经过时或不能在 Heroku 环境中正常运行。我可以调整 GC 设置以使其更具攻击性吗?

最佳答案

GC 应该做清理工作,而且很可能会做。

您可以使用 GC.start 强制 GC;如果没有收集到很多对象,这将是,但我怀疑这不是问题所在。

您是否有可能通过保留缓存副本或其他方式以某种方式创建一堆对象并且从不释放它们?

我不熟悉检查这个的现有工具,但您可能想使用 ObjectSpace 检查存在哪些对象。例如:

ObjectSpace.each_object.with_object(Hash.new(0)){|obj, h| h[obj.class] +=1 }
# => a Hash with the number of objects by class

例如,如果您的某个类(class)得到了意外的数字,您会更好地了解去哪里寻找。

关于ruby-on-rails - 我怎样才能找到 Heroku 上的内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13311930/

相关文章:

ruby-on-rails - 在 Ruby 中获取人的年龄

ruby-on-rails - routes.rb - 不支持 Controller 名称

ruby-on-rails - 设计如何将 current_user 传递给 confirm_instructions 邮件程序

ruby-on-rails - 在 rails 上使用 htaccess 密码保护?

ruby-on-rails - Paperclip 不支持 .doc 文件

Ruby regex- gsub 存储它匹配的内容吗?

ruby-on-rails - Rails docker postgres 连接被拒绝

node.js - 如何在本地测试在 Heroku 中运行的 node.js + mongodb 应用程序?

node.js - Heroku 上的 Nuxt.js Webpack 构建错误

heroku - 为 Heroku 选择新的 Relic 插件