フレームグラフを操作する
Cloud Profiler では、フレームグラフを使用してプロファイリング データが表示されます。コンセプトの概要については、フレームグラフをご覧ください。
フレームグラフはフレームで構成されています。各フレームはサービス内の関数を表します。
フレームの幅は、分析される指標の消費量に対応しています。たとえば、先頭のフレームはサービス全体を表し、分析されている指標を 100% 消費しています。このため、このフレームは全幅で表示されます。
デフォルトでは、フレームの色は関数のパッケージに対応しています。Node.js のようにパッケージ情報が利用できない場合は、ソースファイルの名前が関数ブロックの色の設定に使用されます。コールスタックで、ブロックの色が変わった場合はパッケージ間で移動があったことを表します。フレームの色設定を変更することもできます。詳細については、カラーモードをご覧ください。
フレームグラフには、一連のプロファイルの平均値を持つ 1 つ以上のコールスタックが表示されます。
- 個々のプロファイルは、1 つの Compute Engine ゾーン内にある構成されたサービスの 1 つのインスタンスから 1 分に 1 回収集されたデータを表します。プロファイルの収集期間はプロファイルの種類によって異なります。詳細については、プロファイルの収集をご覧ください。
- 最大 250 個のプロファイルが平均化されます。使用可能なプロファイル数が 250 を超える場合、250 個のプロファイルがランダムに選択され、サンプルセットとして使用されます。
- フレームグラフの先頭フレーム(ルート)はサービス全体を表します。ルートフレームの下には別のフレームが表示され、グラフの 2 行目を構成します。色分けされたフレームは、サービスから行われるトップレベルの呼び出しを表します。色付きの関数フレームの下に別のフレームセットが表示されます。これらのフレームは上のフレームのリソースの一部を使用しています。グラフ内の関数フレームの階層は呼び出しシーケンスを表し、フレームの幅はその関数またはメソッドのリソース消費量の割合を表しています。
たとえば、docdemo-service のヒープ消費量を表す次のグラフでは、サービスが異なるトップレベル フレームを呼び出しています。その中の 1 つは Go ランタイムの main
関数です。これらトップレベル フレームの幅は、Go ランタイムの main
、アプリケーション固有の main
、allocOnce
、allocImpl
を含むコールスタックにより、ヒープの大部分が消費されることを表しています。
ルートフレームの場合、指標の消費量に関する情報が表示されます。
フレームにカーソルを合わせる
フレームグラフのフレームの上にポインタを置くと、フレームラベルが開き、そのフレームに関する次の情報が表示されます。
- 関数名
- 関数のファイル名
- 絶対使用量と使用率
指標の消費量に関する情報に合計という接頭辞が付いている場合、指標値とパーセンテージの値が関数とその子に対するものであることを意味します。一方、関数自体という接頭辞が付いている場合は、指標値とパーセンテージの値が子を除く関数自体のものであることを意味します。
このダイアログには、次のボタンもあります。
- フォーカス: 現在のフレームの関数にグラフをフォーカスします。
- スタックを表示: このフレームの関数を含むスタックのみを表示するフィルタを追加します。
- 履歴を表示: フレームの関数の履歴ビューを開きます。
次の例では、runtime.main
関数が /usr/local/go/src/runtime/proc.go
ファイルにあることがツールチップに表示されています。指標の消費量に関する情報を見ると、runtime.main
とその子が 54.73 MiB のメモリを消費し、プログラムの総メモリの約 98% を消費していることがわかります。
フレームを選択する
フレームを選択すると、フレームグラフが再描画されて、フレームが全幅表示になり、コールスタック内の上位の色がミュートされます。フレームを選択しても設定は変わりません。グラフの表示方法が変わるだけです。元の表示に戻すには、ルート(最上位)フレームを選択します。
次の例では、ポインタが小さなフレームの上にあり、コールスタックが見にくくなっています。ツールチップを見ると、(*huffmanBitWriter).write
がフレーム関数であることがわかります。
フレームを選択すると、グラフが再描画され、コールスタックが見やすくなります。