フレームグラフをフィルタする
Cloud Profiler では、選択したプロファイルの情報の表示方法を制御するフィルタを追加できます。たとえば、特定のフレームやコールスタックを非表示にするフィルタを追加できます。フィルタを追加または削除しても、選択したプロファイルのセットは変更されません。
フィルタを指定するには、ユーザー定義の VALUE
とペアになる定義済みの FILTER-OPTION
を使用します。
[FILTER-OPTION] : [VALUE]
追加した各フィルタは、フィルタバーに表示されます。この例では、Metric : Bytes
を表示するフィルタが 1 つあります。
Profiler は選択したプロファイル タイプに基づいて、FILTER-OPTION
の Metric
と VALUE
を含むフィルタを自動的に作成します。一部のプロファイル タイプでは VALUE
を変更できます。このフィルタは削除できません。
フィルタを追加するには、次のいずれかの方法を使用します。
- [フィルタ] filter_list をクリックし、リストからオプションを選択して値を入力します。
- フィルタバーの灰色のテキスト [プロファイル データのフィルタを追加] をクリックして、フィルタ オプションと値を入力します。
- [フォーカス]、[フレームから表示]、[スタックを表示] フィルタ オプションの場合は、フレームの上にポインタを置いてフレームのツールチップを表示し、オプションを選択することもできます。
フィルタを削除するには、フィルタで [閉じる] ボタン close をクリックします。
表示するデータを準備するときに、Profiler はフレームとフィルタを比較します。一致が発生すると、Profiler は FILTER-OPTION
を使用して実行するアクションを決定します。フレームの関数名または関数のソースファイル名に VALUE
が含まれている場合、フレームとフィルタが一致します。比較では、大文字と小文字が区別されます。たとえば、フィルタが Hide frames : oo
の場合、foo
、foo1
、busyloop
という名前の関数を含むフレームはフレームグラフに表示されません。
指標
プロファイルの種類の集計モードを設定するには、[指標] フィルタを使用します。たとえば、プロファイルの種類として [ヒープ] を選択した場合、データを [バイト数] で表示するのか、[オブジェクト数] で表示するのかを選択できます。
[指標] フィルタで使用できる選択肢は、プログラミング言語と選択した [プロファイルの種類] によって異なります。
- [CPU 時間] プロファイルの場合、選択できるのは [CPU 時間] だけです。
[ヒープ] プロファイルの場合、選択肢は次のとおりです。
- バイト
- オブジェクト
[割り当てられたヒープ] プロファイルの場合、選択肢は次のとおりです。
- 割り当てバイト数合計
- 割り当てオブジェクト数合計
[経過時間] プロファイルの場合、選択肢は次のとおりです。
- 数
- 経過時間
[スレッド] プロファイルの場合、選択できるのは [Goroutine] だけです。
[競合] プロファイルの場合、選択肢は次のとおりです。
- 遅延
- 競合
プロファイリングの種類で使用できる指標の詳細については、プロファイリングのコンセプトをご覧ください。
次のスクリーンショットは、プログラムの CPU 消費量を表しています。
これを見ると、busyloop
ルーチンが foo1
と foo2
を呼び出していることがわかります。また、どちらも他の複数のルーチンを呼び出しています。フィルタを追加すると、グラフに表示されるデータをさらに絞り込むことができます。
フォーカス
[フォーカス] フィルタを使用して 1 個の関数を選択すると、その特定の関数の呼び出し元、呼び出し先のコードパスがフレームグラフに表示されます。
グラフをフォーカスして結果を確認する方法については、フレームグラフをフォーカスするをご覧ください。
スタックを表示
フィルタの値と一致するフレームのコールスタックを表示し、他のコールスタックを非表示にするには、[スタックを表示] フィルタを使用します。グラフには、関数の呼び出し元と呼び出し先、つまり、一致する関数を呼び出すものと、その関数が呼び出すものが表示されます。
このフィルタは、大文字と小文字を区別した部分文字列テストを実行します。フレーム関数にフィルタ値が含まれている場合に一致します。
前の例で、CPU 使用量のグラフが foo1
関数に関連するコールスタックのみを表示するよう制限するには、[スタックを表示] フィルタに foo1
を設定します。
スタックを非表示
フィルタの値と一致するフレームを含むコールスタックを非表示にします。このフィルタは、必要のないスタックを非表示にする場合に役立ちます。たとえば、Java アプリケーションの場合、[Hide stacks: unsafe.park
] フィルタを追加するのが一般的です。
このフィルタは、大文字と小文字を区別した部分文字列テストを実行します。フレーム関数にフィルタ値が含まれている場合に一致します。
フレームから表示
フィルタの値と一致するフレーム以降のすべてのコールスタックを表示し、他のコールスタックを非表示にするには、[フレームから表示] フィルタを使用します。結果のグラフには、指定した関数以降のコールスタックが表示されます。このフィルタは、関数が複数の場所から呼び出され、それぞれに起因する消費量の合計を確認したい場合に便利です。
たとえば、baz
関数からの呼び出しのみを表示するには、[フレームから表示] フィルタに baz
を設定します。
このフィルタは、大文字と小文字を区別した部分文字列テストを実行します。フレーム関数にフィルタ値が含まれている場合に一致します。
フレームを非表示
フィルタの値と一致するフレームを非表示にするには、[フレームを非表示] フィルタを使用します。結果のグラフでは、関数の呼び出し元が表示され、関数の呼び出し先はまとめて集計されます。これは、無関係なフレームをグラフから削除する場合に便利です。
たとえば、foo1
と foo2
の両方のフレームを非表示にするには、[フレームを非表示] フィルタに foo
を設定します。foo1
と foo2
が条件に一致するため、この両方のフレームが削除されます。bar
ルーチンと baz
ルーチンはどちらのフレームでも呼び出されているので、これらのデータはまとめて集計されます。
このフィルタは、大文字と小文字を区別した部分文字列テストを実行します。フレーム関数にフィルタ値が含まれている場合に一致します。
ハイライト
関数名がフィルタの値と一致するすべてのフレームをハイライトするには、[ハイライト] フィルタを使用します。関数は通常のカラーモードのままですが、呼び出しシーケンスの色は少し薄くなります。
たとえば、ハイライトを使用していないグラフは次のようになります。
baz
関数をハイライトすると、次のようになります。
このフィルタは、大文字と小文字を区別した部分文字列テストを実行します。フレーム関数にフィルタ値が含まれている場合に一致します。
カラーモード
デフォルトでは、フレームの色は関数のパッケージに対応しています。Node.js のようにパッケージ情報が利用できない場合は、ソースファイルの名前が関数ブロックの色の設定に使用されます。デフォルトの設定では、コールスタック フレームの色の変更はパッケージ間での移行を意味します。デフォルトでは、[名前] に基づいて [カラーモード] フィルタが適用されます。
関数とその子関数の指標の消費量に応じてフレームグラフのフレームに色を設定するには、[合計] を指定して [カラーモード] フィルタを追加します。関数が複数のコールスタックで呼び出される場合、すべてのコールスタックの指標の消費量に基づいて色が決まります。たとえば、main
と busyloop
は赤色で表示されています。これらの 2 つのフレームが最も多くの CPU 時間を消費します。foo2
と baz
というラベルの付いたフレームは濃いオレンジ色で、foo1
というラベルの付いたフレームは薄いオレンジ色です。bar
と load
のフレームが最も軽量です。このフレームグラフは、foo2
が消費する CPU 時間が foo1
より多く、busyloop
より少ないことを表しています。
子関数の消費量を除外した関数の指標の消費量に応じてフレームグラフのフレームに色を設定するには、[関数自体] を指定して [カラーモード] フィルタを追加します。次の例は、baz
関数が他のすべての関数より多くの CPU 時間を消費していることを表しています。