13

GC.statRails アプリでメモリ使用量をプロファイリングするため に使用しています。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_MINおよびをいじっていますが、これらの環境変数を変更しても、またはRUBY_GC_MALLOC_LIMITには影響がないようです。最小ヒープスロットを大幅に増やすと、それが下がると予想されます。ですから、すべての値が何を表しているのかを正確に知りたいのです!:heap_count:heap_length:heap_countGC.stat

Ruby 1.9.3 を使用しています。

4

3 に答える 3

12

:count- gc サイクルの数 (例: gc が実行された回数)

:heap_used- 割り当てられたヒープの数。ruby はデフォルトで 1 つのヒープを作成し、すべてのオブジェクトを割り当てるのに十分でない場合はヒープ数を増やします

:heap_length- ヒープのサイズ。これが最初のヒープ サイズです。理想的には、スクリプトの開始後に 1 つのヒープが必要です

:heap_increment- Ruby が新しいヒープを作成した場合に、最後のヒープ サイズに追加される数値

:heap_live_num- 割り当てられているヒープ スロットの数

:heap_free_num- 空いているヒープ スロットの数

:heap_final_num- ファイナライザーのスロット番号

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

于 2012-09-28T07:12:31.617 に答える
4

正しい環境変数名はRUBY_HEAP_MIN_SLOTS.

https://github.com/ruby/ruby/blob/v1_9_3_194/gc.c#L441

于 2012-10-09T22:00:43.770 に答える
0

:countは、Ruby MRI 1.9.3p448のフル GCサイクルではなく、「レイジー スイープ」 GC サイクルの数のように見えます。

プロファイラーが GC イベントを報告する前に、完全な GC を強制する必要がありました。

GC::Profiler.enable
GC.start
GC::Profiler.report
于 2014-03-05T02:41:47.223 に答える