13

私はGC.statを使用して、Railsアプリケーションでのメモリ使用量をプロファイルしています。 GC.statは、以下のキーを持つハッシュを返す:RubyのGC.statのフィールドは何を意味していますか?

:count 
:heap_used 
:heap_length 
:heap_increment 
:heap_live_num 
:heap_free_num 
:heap_final_num 

誰もがこれらの値の意味を正確に何を知っていますか? Rubyのソース(gc.c)には、それらのドキュメントはありません。「ハッシュの内容は実装定義であり、将来変更される可能性があります。

これらのフィールドのいくつかは、コンテキストから意味があります。 countはRubyが割り当てたヒープの数です。しかし、heap_final_numとは何ですか? heap_incrementとは何ですか? heap_lengthは最小ヒープサイズですか?

私はRUBY_MIN_HEAP_SLOTSRUBY_FREE_MINRUBY_GC_MALLOC_LIMITをいじるんだけど、それらのenv VARSを変更する:heap_countまたは:heap_length上の任意の効果を持っていないようです。最小ヒープスロットを大幅に増やすと、:heap_countがダウンすることが予想されます。だから私は本当にすべてのGC.statの値が表すものを正確に知りたいです!

私はRuby 1.9.3を使用しています。

答えて

12

:count - gcサイクル数。どのように多くの時間がGCの実行に

:heap_usedをしました - 割り当てられたヒープの数を、ルビーは、デフォルトでは1つのヒープを作成し、それがすべてのオブジェクト

:heap_lengthを割り当てることが十分ではない場合は、ヒープの数を増やす - ヒープのサイズを。これが最初のヒープサイズです。理想的には、スクリプトの後に1つのヒープが起動している必要があり

:heap_increment

- ルビーは、新しいヒープを作成する場合は、最後のヒープサイズに追加される番号

:heap_live_num - ヒープスロットは

:heap_free_num

を割り当てられているどのように多くの - どのように多くのヒープスロットは

:heap_final_num無料です - ファイナライザは、あなたがその権利を増大させることによってある数

をスロットヒープの数を1に減らす必要があります。しかし、より高い数字のRUBY_FREE_MINを取得すると、より多くのヒープが得られます。現在のヒープが持つべき空きスロットの数を示します。その数が指定した数より少ない場合、ルビは新しいヒープを作成します。 RUBY_GC_MALLOC_LIMITは、rubyがGCプロセスを実行する頻度に関連しており、ヒープ数に直接影響しません。このカウンタは、rubyがGCを実行するmallocsの数を示します。しかし、それは早くも実行することができます。それはruby objの割り当てではないことに注意してください。ルビインタープリタの内部obj割り当てでインクリメントされるグローバルルビの内部mallocカウンタです。

+0

を情報この回答で(http://samsaffron.com/archive/2013/11/22/demystifying-the-ruby-gc)を入力してください。 – tihom

0

それは、のように私には見えます:'怠惰なスイープ' GCサイクル、ないフルGCのRuby MRIの1.9.3p448上サイクルの数である数えます。

私はプロファイラを任意のGCイベントを報告する前に、フルGCを強制する必要がありました:[この記事を] accurate..seeされていないに

GC::Profiler.enable 
GC.start 
GC::Profiler.report 
関連する問題