Sheap
https://github.com/jhawthorn/sheap
Ruby
の
heap
dump anaylyzer
heap dump
を探索してインタラクティブに問い合わせることができる
The answer is in your heap: debugging a big memory increase in Ruby on Rails
Rails
7.0 から Rails 7.1 にアップグレードした後、アプリケーションの
メモリ
使用量が約 25% 増加した
増加は起動時ではない
Pumaの設定変更はしてない
derailed_benchmark
でheap dumpを出力
あるモデルインスタンスが大量にあることがわかった
sheapでさらに調査をした
モデルインスタンスを見つけることができ、これを参照しているものをヒープのルートまで遡って特定できた
singleton
classで
instance_eval
している
singleton classは
Ruby VM
でキャッシュされる
ActionController
や
ActiveRecord
のインスタンスを参照するオブジェクトでsingleton methodが定義されると、
GC
されずに残り続けてしまう
Rails本体へのパッチで解消し、7.1.3でリリースされた
https://github.com/rails/rails/pull/50298
使用例
So We've Got a Memory Leak…