Почему ActionController::Metal утечка памяти?

У меня есть следующий класс:


class Myclass < ActionController::Metal
  def myaction
    huge_object.do_something
    # etc.
  end

  private
  def huge_object
    @obj ||= begin
      # allocate and initialize a ~10MB object
    end
  end
end

То, что я был поражен, обнаружил, что даже в производстве, каждый раз, когда вызывается myaction, объект выделяется. Более того, что-то содержит ссылку на это, поскольку GC не собирает это. Я сделал обходной путь, обернув объект в другом классе и включив Singleton в этот класс. Тем не менее, я хочу понять, что здесь происходит.

1 ответ

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

Другие вопросы по тегам