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

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

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

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

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

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

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

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

Похожие вопросы