问题
我正在调试一个rake任务中的内存泄漏。 我想看到以下内容的调用堆栈:
- 存在的对象
- 最初分配这些对象的对象或行
使用ruby-prof可以实现吗?
如果不行,我应该使用什么工具?
设置
Gems
- rails 3.2.16
- event_bus 1.0.0 (https://github.com/kevinrutherford/event_bus)
- activerecord-fast-import (https://github.com/jsuchal/activerecord-fast-import)
Rake任务
- 使用数据加载文件和Active记录对象将CSV文件直接导入MySQL数据库。
我尝试过的方法
我尝试了以下模式:
- RubyProf::ALLOCATIONS
- RubyProf::MEMORY
文档中只是说:
RubyProf::ALLOCATIONS 对象分配报告显示程序中每个方法分配的对象数量。
RubyProf::MEMORY 内存使用报告显示程序中每个方法使用的内存量。
这意味着ruby-prof只报告了对象的总分配情况,而不仅仅是存活的对象。
我尝试了Ruby-Mass和Bloat Check,但是两者都似乎无法实现我的要求。 Ruby-Mass还会因为某种原因在内存中找到FactoryGirl对象而崩溃。
GC.start
来释放一些内存。这会使你的应用程序变慢,但内存占用通常会大大降低。 - tadman