2

同僚と私は、Ruby on Rails アプリケーションのメモリ リークを探している最中であり、次のようなコードが原因である可能性があるという最初の兆候がいくつかあります。

module Foo
  class Bar
    def self.example
      @widgets ||= ::Widget::Factory.new
    end
  end
end

私たちの推測では、self.exampleはクラス メソッドであるため、メモ化された のインスタンスを適切にガベージ コレクションできない可能性がありますWidget::Factory

これにより、バックグラウンド ワーカーの 1 つが実行されるたびにメモリ リークが発生すると考えられます。のインスタンスをスピンアップしているようですFoo::Barが、によって作成されたオブジェクトの割り当てを解除することはありませんWidget::Factory

MRI の GC がそのようなユースケースでどのように機能するかについての洞察を持っている人はいますか?

4

0 に答える 0