Задать вопрос
@justed_ss
ewf

Почему rails не высвобождает память?

Есть приложение, база данных с кучей данных. Есть метод в модели, формирующий файл/json путем хитрых манипуляций и потреблений гор памяти, а на выходе отдающий результат. Результат отдается через метод контроллера.
Суть проблемы в том что память не высвобождается.

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

rails 4.1.4 ruby 2.0.0
Пробовал ruby 2.2.2 rails 4.1.12 результат тот же
Пробовал разные веб серверы( puma, thin, webbriks ), пробовал убивать воркеры ничего не меняется.
  • Вопрос задан
  • 375 просмотров
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 1
viktorvsk
@viktorvsk
Потому что так работает подавляющее число скриптовых языков.
Когда нужна память - она берется из ОС. Когда память чистится, она помечается как доступная к перезаписи, но не отдается обратно ОС

Для такой задачи, как вы описали, следуте использовать фоновые очереди задач: delayed job, resque, sidekiq, rabbitmq...

Кстати, delayed job и, кажется, sidekiq - тоже не высвободят память. Их нужно будет убивать периодически убивать(например, с помощью monit и лимитом памяти). Resque же создает новый форк на каждую задачу
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
OTKLIK POWER Москва
от 80 000 до 150 000 ₽
от 6 000 до 8 000 $
Netwrk Буэнос-Айрес
от 5 000 до 7 500 $