ガーベッジコレクション

ガーベッジコレクション (GC) 、未使用のデータオブジェクトを検出し、別のプロセスで使用できるようにするためにそのメモリ領域を回収します。New Relic Ruby エージェントでは、MRI 1.9.2 以上又は Ruby Enterprise Edition で動作するアプリケーションのガベージコレクションの消費時間についての情報を収集することができます。ただし、利用するには、明示的に、アプリケーションでこの機能を有効にする必要があります。

ガーベッジコレクション計測の有効化

この機能を有効にするには、アプリケーションの初期化に適切な呼び出しを追加します。

  • MRI 1.9.2 以上: GC::Profiler.enable
  • Ruby Enterprise Edition: GC.enable_stats

Railsアプリケーションでは、config/initializers の initializer にこの呼び出しを追加するか、config/application.rb ファイルに直接追加するかどちらかを行ってください。

アプリ全体の GC 統計の表示

全体的なガベージコレクションの統計情報を表示する方法は、以下のとおりです。

  1. New Relic のメニューバーから、APM > Applications > (選択したアプリ) > Monitoring > Overviewを選択する。
  2. Applications Overview ダッシュボードにて、Web transactions response time チャート上で GC Execution を探します。
screen-overview-with-garbage-collection
Applications > (選択したアプリ) > Monitoring > Overview: アプリサーバーのレスポンスタイムチャートでは、ガベージコレクションの統計情報は、GC Execution としてラベル付けされています。

GC 統計の詳細表示

トランザクション単位でガベージコレクションのメトリックを表示するには、APM > Applications > (選択したアプリ) > Transactions > (選択したトランザクション) を選択します。すると、GC で費やされた時間、GC がトランザクションごとに呼び出された平均回数を表示します。

screen ruby gc select transaction.png
APM > Applications > (選択したアプリ) > Transactions > (選択したトランザクション):
平均時間や呼び出しの平均数などを含む GC メトリクスの詳細情報を表示するには、個々のトランザクションを選択します。

詳細に含まれる情報:

ガーベッジコレクションの詳細 コメント
Trend of garbage collection time [ガベージコレクション時間の動向] ガベージコレクションは、通常、短時間で行わるため、トレンドラインは、チャートに表示されない場合があります。ガベージコレクションの時間のトレンドを表示するには、 overview チャートもしくは、トランザクションメトリックの詳細に移動します。その後、GC Execution以外のグラフの全ラベルを非表示にします。ラベルを非表示にするには、各ラベルを選択することで、表示と非表示を切り替えられます。
Average number of calls [呼び出しの平均数] 各コントローラーのアクションにおけるガベージコレクションの呼び出し平均数を表示するには、APM の Overview ページにて、Transaction を選択します。そして、コントローラーのアクションを選択し、App Server Breakdown [アプリサーバーの内訳]を表示します。

ガーベッジコレクションのバックグラウンド情報


New Relic の Chris Kellyによるプレゼン: “Down the rb_newobj() Rabbit Hole: Garbage Collection in Ruby” at Ruby Australia on Vimeo (40 分弱).

さらに詳しい情報

追加のドキュメントリソースは次のとおりです。