Задержка работы утечки памяти? - PullRequest
6 голосов
/ 28 июня 2010

Я использую colleideidea delayed_job с моим приложением Ruby on Rails (v2.3.8) и выполняю около 40 фоновых заданий с ним на машине Slicehost 8 ГБ ОЗУ (Ubuntu 10.04 LTS, Apache 2).

Допустим, я зашел на свой сервер без рабочих. Когда я делаю free -m, я вижу, что я обычно использую около 1 ГБ ОЗУ из 8. Затем, после запуска рабочих и ожидания примерно минуты, чтобы они были использованы кодом, я получаю около 4 ГБ , Если я вернусь через час или два, я буду на 8 ГБ и в памяти подкачки, и мой сайт будет выдавать 502 ошибки.

До сих пор я только что убивал рабочих и перезапускал их, но я бы лучше решил корень проблемы. Какие-нибудь мысли? Это утечка памяти? Или, как предложил друг, мне нужно найти способ запустить сборку мусора?

Ответы [ 2 ]

6 голосов
/ 03 апреля 2012

На самом деле Delayed :: Job 3.0 приводит к утечке памяти в Ruby 1.9.2, если ваши модели имеют сериализованные атрибуты.(Я нахожусь в процессе исследования решения.)

Вот кто-то, кто, казалось, решил это, http://spacevatican.org/2012/1/26/memory-leak-in-yaml-on-ruby-1-9-2

Вот проблема от Задержки :: Работа https://github.com/collectiveidea/delayed_job/issues/336

0 голосов
/ 14 марта 2012

Практически каждый раз, когда кто-то спрашивает об этом, проблема в его коде. Попробуйте использовать один из доступных инструментов профилирования, чтобы определить, где у вас течет работа. (https://github.com/wycats/ruby-prof или аналогичный.)

Запуск GC в конце каждого задания уменьшит ваше максимальное использование памяти за счет увеличения пропускной способности. Однако это не остановит Ruby от вздутия до максимального размера, необходимого для какой-либо отдельной работы, поскольку Ruby не может освободить память обратно в ОС. Я не рекомендую использовать этот подход.

...