Найти утечку памяти в проекте Ruby on Rails - PullRequest
13 голосов
/ 01 октября 2010

У меня есть проект Ruby on Rails с утечкой памяти. Он продолжает использовать все больше и больше памяти, пока не выйдет из строя. Сброс количества объектов на класс с помощью ObjectSpace я нашел это:

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

Я считаю, что FileNode - это проблема. Это модель. Любые идеи, как найти, где хранятся ссылки на 17k FileNodes?

Это использует Ruby 1.8.6 и Rails 2.2.0. К сожалению, обновление не вариант.

Ответы [ 3 ]

7 голосов
/ 01 октября 2010

Чарльз Оливер "Headius" Наттер недавно написал серию постов в блоге об отладке утечек памяти в Ruby с помощью инструментов JVM:

IIRCВ то же время другие члены сообщества JRuby также опубликовали несколько других сообщений в блоге на ту же тему.

Их основной аргумент (хотя они слишком вежливы, чтобы так его изложить) заключается в том, чтоиспользовать что-либо кроме JRuby для отладки утечек памяти просто глупо, просто потому, что JRuby может использовать инструменты Java, в которые вложено больше инженерных усилий, чем все инструменты профилирования Ruby вместе .И сообщество Ruby получает эти инструменты бесплатно, потому что все корпоративные Java-дроны платят за них.

5 голосов
/ 01 октября 2010

Возможно, вы захотите взглянуть на презентацию «Сборка мусора и куча рубинов»:

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

Начиная со слайда 26 различные полезные инструменты (ltrace, bleak_house, memprof и т. Д.).) получить объяснение.

2 голосов
/ 03 октября 2010

Я думаю, вы найдете Debugging Ruby от Aman Gupta очень полезным. Он также работал над поиском и устранением утечек памяти в Rails 3, поэтому его методы отладки наверняка будут полезны.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...