【发布时间】:2014-06-09 17:23:06
【问题描述】:
我在 Heroku 上有一个非常普通的 Rails 4、Ruby 2 应用程序。一段时间后我注意到 R14 错误,我找到了一个增加内存到 sign_in/sign_out 的来源。因此,如果我登录用户然后注销,我会看到内存增加 1mb,有时增加 10mb。如果我继续对同一个用户进行签名和注销,内存就会不断增加。
更多细节:
- 设计 3.2.4、Papertrail、Rollbar
- Dalli 商店 / Memcachier
- 会话持续 90 分钟
- 会话中没有任何内容
- 登录后,用户被重定向到大部分缓存的欢迎页面
- NewRelic 除了增加内存使用率之外没有提供太多信息
- Heroku 日志运行时指标已启用
- 只运行 1 个 Unicorn worker(因为内存不足,想运行 2 或 3 个)
- 2 db 连接池,按照 Heroku 的建议,每 10 秒获取一次连接
我用它来识别字符串和数组在每次登录/登录/退出时增加 1,000 个字符串,500 个数组:
ObjectSpace.each_object.with_object(Hash.new(0)){|obj, h| h[obj.class] +=1 }.select{|k,v| puts "#{k} = #{v}"}
我想我的主要问题是,如果我使用 Dalli 存储/Memcachier 进行会话,那么当用户登录时是否会对 Dyno 内存产生任何影响?我的假设是否定的。有什么想法可以解决这个问题吗?
【问题讨论】:
标签: ruby-on-rails heroku memory-leaks devise