Rails 4,Ruby 2.1在sign_in / sign_out上出现明显的内存泄漏

时间:2014-06-09 17:23:06

标签: ruby-on-rails heroku memory-leaks devise

我在Heroku上有一个非常漂亮的Rails 4,Ruby 2应用程序。一段时间后我注意到R14错误,我追踪了一个增加内存的来源sign_in / sign_out。因此,如果我登录用户然后退出,我会看到内存增加1mb,有时甚至10 MB。如果我继续签名并注销同一个用户,内存会一直在上升。

更多细节:

  • 设计3.2.4,Papertrail,Rollbar
  • Dalli store / Memcachier
  • 会话持续90分钟
  • 什么都没有投入会议
  • 登录后,用户被重定向到主要是片段缓存的欢迎页面
  • NewRelic除了增加内存使用量之外没有提供太多信息
  • 已启用Heroku日志运行时指标
  • 只运行1名Unicorn工作人员(因为他们的内存耗尽,想要运行2或3)
  • db连接池2,连接按照Heroku的建议每10秒收一次

我已经用它来识别每次发生sign_in / sign_out时字符串和数组都会增加1,000个字符串,500个数组:

ObjectSpace.each_object.with_object(Hash.new(0)){|obj, h| h[obj.class] +=1 }.select{|k,v| puts "#{k} = #{v}"}

我想我的主要问题是,如果我正在使用Dalli store / Memcachier进行会话,那么当用户登录时,是否会对Dyno内存产生任何影响?我的假设是否定的。关于打猎的任何想法?

1 个答案:

答案 0 :(得分:0)

您使用的是ruby 2.1.1还是2.1.2?我在ruby 2.1.1上有内存问题,升级到2.1.2有帮助。你可以在这里阅读更多: http://samsaffron.com/archive/2014/04/08/ruby-2-1-garbage-collection-ready-for-production