Pablo Fernandez
Pablo Fernandez

Reputation: 287800

Find memory leak in a Ruby on Rails project

I have a Ruby on Rails project with what seems to be a memory leak. It keeps using more and more memory until it crashes. Dumping the amount of objects per class using ObjectSpace I've found this:

Name                                                              Count
-----------------------------------------------------------------------
String                                                           649476
Hash                                                              59695
Array                                                             39407
ActiveSupport::Multibyte::Codepoint                               19337
FileNode                                                          17134
Time                                                               3391
Regexp                                                             1944
ActionController::Routing::DividerSegment                          1743
Proc                                                               1597
Gem::Version                                                       1545
Class                                                              1503
Gem::Requirement                                                   1479
ActiveRecord::DynamicFinderMatch                                   1021

I believe FileNode is the problem. It's a model. Any ideas how to find where the references to the 17k FileNodes are being kept?

This is using Ruby 1.8.6 and Rails 2.2.0. Upgrading is not an option unfortunately.

Upvotes: 14

Views: 7518

Answers (3)

Jörg W Mittag
Jörg W Mittag

Reputation: 369594

Charles Oliver "Headius" Nutter has recently written a series of blog posts on debugging memory leaks in Ruby using JVM tools:

IIRC, there were also a couple of other blog posts on that same topic by other members of the JRuby community around the same time.

Their basic argument (although they are too polite to spell it out that way) is that using anything other than JRuby to debug memory leaks is just plain stupid, simply because JRuby can use Java tools which have more engineering effort put into them than all Ruby profiling tools together. And the Ruby community gets those tools for free, because all the enterprise Java drones are paying for them.

Upvotes: 8

user133012
user133012

Reputation:

I think you'll find Debugging Ruby by Aman Gupta very helpful. He has also been working on finding and fixing memory leaks in Rails 3 so his debugging techniques will most certainly be helpful.

http://www.scribd.com/doc/23548865/Debugging-Ruby

Upvotes: 3

Michael Kohl
Michael Kohl

Reputation: 66867

You might want to look at the presentation "Garbage Collection and the Ruby Heap":

http://www.scribd.com/doc/32718051/Garbage-Collection-and-the-Ruby-Heap

Starting from Slide 26 various useful tools (ltrace, bleak_house, memprof etc.) get explained.

Upvotes: 6

Related Questions