Skip to content

Instantly share code, notes, and snippets.

@sonots
Last active October 27, 2015 00:57
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sonots/71277ef3f9b53fa87862 to your computer and use it in GitHub Desktop.
Save sonots/71277ef3f9b53fa87862 to your computer and use it in GitHub Desktop.

2.1

{:count=>24, # GC全体回数(major + minor)
 :heap_used=>261,
 :heap_length=>261, # ヒープに現在あるページ数
 :heap_increment=>27,
 :heap_live_slot=>94990, # 生きているオブジェクト(スロット)の数 total_allocated_object - total_freed_object
 :heap_free_slot=>11400, # すべてのページを通じて空いているスロットの数 (どのページがどのぐらい空いているとかはわからない)
 :heap_final_slot=>0,
 :heap_swept_slot=>58905,
 :heap_eden_page_length=>234,
 :heap_tomb_page_length=>27,
 :total_allocated_object=>536983, # Rubyプログラムが起動してから作られたオブジェクトの数
 :total_freed_object=>441993, # Rubyプログラムが起動してから解放されたオブジェクトの数
 :malloc_increase=>545152, # GC 発生までに malloc/realloc したバイト総数 (GC 起動でリセット)
 :malloc_limit=>16777216, # これを越えて malloc すると Minor GC が発生する閾値. RUBY_GC_MALLOC_LIMIT_GROWTH_FACTOR で調節
 :minor_gc_count=>19, # Minor GC の回数
 :major_gc_count=>5,  # Major GC の回数
 :remembered_shady_object=>545,
 :remembered_shady_object_limit=>1040,
 :old_object=>45701, # 世代別GCにおいて Old マークされているオブジェクトの数. Minor GC で解放されない. young = heap_live_slot - old_object
 :old_object_limit=>83520,
 :oldmalloc_increase=>1466768, # 古いオブジェクト版の malloc_increase
 :oldmalloc_limit=>16777216} # 古いオブジェクト版の malloc_limit. RUBY_GC_OLDMALLOC_LIMIT_GROWTH_FACTOR で調節

GC を設定できる環境変数 (出典: Effective Ruby)

  • RUBY_GC_HEAP_INIT_SLOTS
    • 作成 する初期スロットの数。この数をデフォルトの 10, 000 よりも大きくすると、アプリケーションのブート時にガベージコレクタが実行される回数を減らせる。
  • RUBY_GC_HEAP_FREE_SLOTS
    • ガベージコレクタ 実行後に利用可能でなければならないスロット数の最小値。フリースロットの数がこの値よりも少なくなると、新たなページが確保され、ヒープに追加される。デフォルトの値は 4, 096 である。
  • RUBY_GC_HEAP_GROWTH_FACTOR
    • スロット を追加するときにヒープに追加されるページ数を決めるときに使われる係数。デフォルトの値は 1. 8。
  • RUBY_GC_HEAP_GROWTH_MAX_SLOTS
    • 1 度のメモリ確保でヒープに追加できるスロット数の最大値。デフォルトは、上限を無効にする 0 になっている。
  • RUBY_GC_HEAP_OLDOBJECT_LIMIT_FACTOR
    • メジャーガベージコレクション を強制実行するかどうかを決めるしきい値の計算に使われる係数。しきい値は、最後のメジャーガベージコレクションで残った古いオブジェクトの数にこの係数を掛けて計算する。そして、しきい値と古いオブジェクトの現在の数を比較する。デフォルト値は 2. 0 である。これは、最後のメジャーマークフェーズ以降、古いオブジェクトの数が倍になったら、新たにメジャーマークが強制実行されるということだ。
  • RUBY_GC_MALLOC_LIMIT
    • GC::stat ハッシュ の malloc_limit キーの最小値。malloc_ increase が malloc_ limit を越えると、マイナーガベージコレクションが実行される。この設定により、 malloc_ increase は特定の値よりも小さくならない。デフォルト値は、 16, 777. 216( 16 MB) である。
  • RUBY_GC_MALLOC_LIMIT_MAX
    • RUBY_GC_MALLOC_LIMIT とは逆に、 malloc_limit の値が大きくなり過ぎないようにする。 0 にすれば、上限を取り除ける。デフォルト値は、 33, 554, 432( 32 MB) である。
  • RUBY_GC_MALLOC_LIMIT_GROWTH_FACTOR
    • malloc_limit の値を時間とともにどのように増やしていくかを制御する係数。新しい malloc_ limit は、 malloc_ limit の現在の値にこの係数を掛けて計算する。
  • RUBY_GC_OLDMALLOC_LIMIT
    • RUBY_GC_MALLOC_LIMIT の古いオブジェクト版。デフォルト値は、 16, 777. 216( 16 MB) である。
  • RUBY_GC_OLDMALLOC_LIMIT_MAX
    • RUBY_GC_MALLOC_LIMIT_MAX の古いオブジェクト版。デフォルト値は、 134, 217, 728( 128 MB) である。
  • RUBY_GC_OLDMALLOC_LIMIT_GROWTH_FACTOR
    • RUBY_GC_MALLOC_LIMIT_GROWTH_FACTOR の古いオブジェクト版。デフォルト値は 1. 2 である。

メモリ管理領域の単位: ヒープ > ページ > スロット

  • 初期スロットデフォルト値 10k
  • ページあたりのスロット数 408
  • => ヒープはブート時 24 ページ (10k / 408)

2.2

{:count=>15,
 :heap_allocated_pages=>74,
 :heap_sorted_length=>75, # ヒープに現在あるページ数. 旧 heap_length
 :heap_allocatable_pages=>0,
 :heap_available_slots=>30161,
 :heap_live_slots=>26360,
 :heap_free_slots=>3801,
 :heap_final_slots=>0,
 :heap_marked_slots=>22637,
 :heap_swept_slots=>7115,
 :heap_eden_pages=>74,
 :heap_tomb_pages=>0,
 :total_allocated_pages=>74,
 :total_freed_pages=>0,
 :total_allocated_objects=>182316, # 旧 total_allocated_object
 :total_freed_objects=>155956, # 旧 total_freed_object
 :malloc_increase_bytes=>96520, # 旧 malloc_increase
 :malloc_increase_bytes_limit=>16777216,
 :minor_gc_count=>12,
 :major_gc_count=>3,
 :remembered_wb_unprotected_objects=>274,
 :remembered_wb_unprotected_objects_limit=>380,
 :old_objects=>20543, # 旧 old_object
 :old_objects_limit=>27894,
 :oldmalloc_increase_bytes=>96968,
 :oldmalloc_increase_bytes_limit=>16777216}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment