GC の起動回数や起動したタイミング、処理時間などの GC に関するプロファイル情報や、ヒープ全体のサイズ、ヒープ内での使用サイズやヒープ内に存在するオブジェクトの個数といった情報を扱うモジュールです。
@see GC
clear -> nil
[permalink][rdoc]蓄積している GC のプロファイル情報をすべて削除します。
例:
GC::Profiler.enable GC.start GC.start GC::Profiler.report #=> 2 回分の GC のプロファイル情報出力する。 GC::Profiler.clear GC.start GC::Profiler.report #=> 1 回分の GC のプロファイル情報出力する。
disable -> nil
[permalink][rdoc]GC のプロファイラを停止します。
例:
GC::Profiler.disable GC::Profiler.enabled? #=> false
このメソッドでは、蓄積したプロファイル情報は破棄しません。破棄したい場合は GC::Profiler.clear を呼び出してください。
[SEE_ALSO] GC::Profiler.enable, GC::Profiler.enabled?
enable -> nil
[permalink][rdoc]GC のプロファイラを起動します。
このメソッドを呼び出してから GC が発生すると、 GC についてプロファイル情報を取得します。
例:
GC::Profiler.enable GC::Profiler.enabled? #=> true
[SEE_ALSO] GC::Profiler.disable, GC::Profiler.enabled?
enabled? -> bool
[permalink][rdoc]GC のプロファイラを起動中であれば true、停止中であれば false を返します。
例:
GC::Profiler.enabled? #=> false GC::Profiler.enable GC::Profiler.enabled? #=> true GC::Profiler.disable GC::Profiler.enabled? #=> false
[SEE_ALSO] GC::Profiler.enable, GC::Profiler.disable
raw_data -> [Hash, ...] | nil
[permalink][rdoc]GC のプロファイル情報を GC の発生ごとに Hash の配列 (:GC_INVOKE_TIME が早いもの順)で返します。GC::Profiler が有効になっていない場合は nil を返します。
例:
GC::Profiler.enable GC.start GC::Profiler.raw_data # => [ { :GC_TIME=>1.3000000000000858e-05, :GC_INVOKE_TIME=>0.010634999999999999, :HEAP_USE_SIZE=>289640, :HEAP_TOTAL_SIZE=>588960, :HEAP_TOTAL_OBJECTS=>14724, :GC_IS_MARKED=>false }, # ... ]
各項目の意味を以下に示します。
GC の処理時間(秒)
Ruby が起動してから GC が起動するまでに経過した時間(秒)
ヒープ内での使用サイズ(バイト)
ヒープ全体のサイズ(バイト)
ヒープ内に存在するオブジェクトの個数
GC がマークフェイズかどうか
また、GC_PROFILE_MORE_DETAIL を有効にして Ruby をビルドした場合、以下のキーも参照できます。
[SEE_ALSO] GC::Profiler.report, GC::Profiler.result
report(out = $stdout) -> nil
[permalink][rdoc]GC::Profiler.result の結果を out に出力します。
GC::Profiler.enable
GC.start
GC::Profiler.report
# => GC 4 invokes.
# Index Invoke Time(sec) Use Size(byte) Total Size(byte) Total Object GC Time(ms)
# 1 0.019 303720 1269840 31746 1.25899999999999967493
[SEE_ALSO] GC::Profiler.result
result -> String
[permalink][rdoc]GC のプロファイル情報をフォーマットし、文字列として返します。
プロファイル情報は、GC の発生ごとに集計します。以下は、5 回 GC が発生した場合の実行例です。
$ ruby -e "GC::Profiler.enable; a = Array.new(100000){ 'aa' }; puts GC::Profiler.result" GC 5 invokes. Index Invoke Time(sec) Use Size(byte) Total Size(byte) Total Object GC Time(ms) 1 0.012 165600 212940 10647 0.00000000000000000000 2 0.016 343700 360360 18018 0.00000000000000014129 3 0.024 605620 622440 31122 0.00000000000000008843 4 0.028 1080280 1097460 54873 0.40010000000000001119 5 0.044 1931420 1949220 97461 0.40009999999999984466
各項目の意味を以下に示します。
GC の起動回数
Ruby が起動してから GC が起動するまでに経過した時間
ヒープ内での使用サイズ
ヒープ全体のサイズ
ヒープ内に存在するオブジェクトの個数
GC の処理時間
[SEE_ALSO] GC::Profiler.report
total_time -> Float
[permalink][rdoc]GC のプロファイル情報から GC の総計時間を計算し、msec 単位で返します。
GC::Profiler.enable
GC.start
GC::Profiler.total_time # => 0.0011530000000000012