2016-04-26 89 views
1

我的应用程序调用一堆的API,它返回大量的数据,这些数据在我的控制器中被操纵以提供各种洞察(传递到我的视图)。内存泄漏在我的Ruby on Rails应用程序

问题是,我一直有我的应用程序中的内存泄漏,我目前需要重新启动我的应用程序后,少数几个请求。

此外,我一直缓存所有的API调用,以提高我的应用程序的性能。我的大部分数据以api的形式存储在哈希表中,并且这些数据被操纵(使用groupby重复排序)。

我使用Ruby 1.9和Rails 3.2。我需要知道如何从应用程序中删除此内存泄漏。

+0

你确定你有内存泄漏吗?或者你的缓存可能会吃掉内存(因为这是缓存)?你也许想发布你的代码 - 没有代码,我们可以做的只是猜测... – spickermann

+0

我已经看到了缓存文件夹的大小,它似乎不太大,大约20MB。我会发布代码,但它太复杂了依赖于其他模块。我正在寻找我们程序员在RoR中导致内存泄漏的常见缺陷。 – amair

+0

附注:两者都是 - [Ruby 1.9](https://www.ruby-lang.org/zh/news/2014/01/10/ruby-1-9-3-will-end-on-2015 /)和[Rails 3.2](http://weblog.rubyonrails.org/2015/1/6/Rails-4-1-9-and-4-0-13-have-been-released/) - 已过时。此版本不会有任何错误修复和安全更新。你可以考虑升级到更新的版本。 – spickermann

回答

3

你应该确认,你确实有内存泄漏,而不是一个内存膨胀。 你可以阅读关于红宝石GC here

GC.stat[:heap_live_slot] - 这一个代表了上次GC后不清除的对象。如果这个数字通过请求稳步增加请求,那么你可以肯定,你有内存泄漏。

+0

这是一个很好的开始。我敢肯定,我有一个内存泄漏,而不是一个膨胀,因为经过一定数量的请求我的应用程序崩溃。控制器中是否有太多处理会影响它,我是否应该将更多逻辑转移到模块中? – amair