【发布时间】:2012-11-17 08:39:26
【问题描述】:
所以我有一个可怕的内存泄漏问题的 Rails 应用程序。我在 Heroku 上运行它,在过去的几天里,我一直在试图弄清楚到底是什么原因造成的,我不得不每隔 5 小时左右不断重启应用程序,否则内存超过 512 和我的应用崩溃了。
我正在使用 Oink,我的实例化类没有任何可疑之处。唯一的问题是,每次加载页面时,使用的内存都会增加。我加载哪个页面都没有关系,它似乎是随机的。
New Relic 也没有太大帮助,因为它与任何一个特定的控制器动作无关。
我唯一能找到的是使用 ObjectSpace,它显示了内存中大量的字符串对象,而且这个数字还在不断增长。我使用了一个小工具来记录字符串的值,它们都是空白的。不是零……而是空格。我的生产应用程序经常使用超过 200,000 个字符串对象。
有谁知道这些可能来自什么?这真的让我感到压力很大,我不得不每五个小时在我的电脑前才能让我的网站保持活力。
谢谢!
【问题讨论】:
-
除了删除代码之外,很难给出具体的建议,直到你有最小的可能的例子来展示问题并发布
-
然后在另一台服务器上运行它,并不断发出 CURL 请求,直到您可以复制为止。
-
建议:不要使用
string = string1 + string 2,也不要使用string += string1。执行:string << string 1,这种方式不会创建额外的字符串 -
好的,重大突破。看来我只是在使用 HAML 引擎的页面上泄漏内存。如果我渲染 erb,则不会泄漏。如果我关闭布局并且在之前泄漏的相同控制器操作上不渲染任何内容,则不会泄漏。关于为什么会发生这种情况的任何想法?
-
好吧,也许不是。我现在意识到这可能与垃圾收集器有关。我注意到我的随机部分比其他相同的部分要花费更长的时间来渲染。当我用谷歌搜索时,我发现了这个帖子:bibwild.wordpress.com/2011/06/28/… 不过这很奇怪,因为我没有从 Rails 2 升级
标签: ruby-on-rails string memory heroku memory-leaks