утечка памяти задачи рейка - PullRequest
       12

утечка памяти задачи рейка

1 голос
/ 02 сентября 2011

У меня есть длительное рейковое задание, которое с течением времени поглощает всю мою системную память? Какой самый быстрый способ отследить мою проблему и разобраться в ней?

Я использую рельсы 2.3.5, ruby ​​1.8.7, ubuntu на slicehost и mysql 5.

У меня есть приложение rails, которое отлично работает. У меня есть ночная работа, которая выполняется всю ночь и выполняет кучу работы (некоторые внешние вызовы в твиттер, гугл и т. Д., А также множество вызовов БД с использованием активной записи). Со временем объем работы увеличивается до почти 4 гигабайт. почему грабли не выпускают память.

Я начал изучать bleak_house, но он кажется сложным в настройке и не обновлялся более года. Я не могу заставить его работать на месте, поэтому я не хочу пробовать в производстве.

спасибо Joel

1 Ответ

1 голос
/ 10 сентября 2011

Выкидываю две идеи.Во-первых, если вы выполняете циклы как часть этой работы, убедитесь, что вы не держите ссылки на ненужные объекты, так как это предотвратит их сбор.Если вы сделали, удалите их из вашего массива, или что-то еще.Кроме того, поместите периодический GC.start в свой цикл, чтобы увидеть, не попало ли оно в GC-ing.

Вторая идея заключается в том, что ruby ​​не использует символы GC, поэтому, если ваши клиенты API хранят значения в виде символов, вы можете получить огромный и растущий набор символов, который никогда не будет использоваться повторно.Символы крошечные, но крошечные вещи все еще могут складываться.

И, конечно, не загружайте больше объектов, чем нужно.используйте #find_each для загрузки AR-объектов в пакетном режиме, если вам нужно перебирать их множество.

...