Question
I wrote a small web app using ruby on rails, its main purpose is to upload, store, and display results from xml(files can be up to several MB) files. After running for about 2 months I noticed that the mongrel process was using about 4GB of memory. I did some research on debugging ruby memory leaks and could not find much. So I have two questions.
- Are there any good tools that can be used to find memory leaks in Ruby/rails?
- What type of coding patterns cause memory leaks in ruby?
Answer
Some tips to find memory leaks in Rails:
- use the Bleak House plugin
- implement Scout monitoring specifically the memory usage profiler
- try another simple memory usage logger
The first is a graphical exploration of memory usage by objects in the ObjectSpace.
The last two will help you identify specific usage patterns that are inflating memory usage, and you can work from there.
As for specific coding-patterns, from experience you have to watch anything that's dealing with file io, image processing, working with massive strings and the like.
I would check whether you are using the most appropriate XML library - ReXML is known to be slow and believed to be leaky (I have no proof of that!). Also check whether you can [memoize](https://web.archive.org/web/20160418141426/http://unintelligible.org/blog/2007/08/16/one- line-ruby-memoization/) expensive operations.