プロファイラースナップショットを読む
Go プロファイラーで作成したプロファイリングスナップショットは、異なるメトリクスで表示できます。
CPU 時間 は、CPU が関数を実行するのに要した時間を示します。 この値はサンプリングデータから派生し、推定実行時間を表します。 このメトリクスを使用して CPU 負荷の高いコードパスを特定し、アルゴリズムを最適化します。
サンプル は、収集されたサンプル内で関数が出現した回数を示します。 プロファイラーは定期的にコールスタックを取得し、各取得がサンプルとなります。 サンプル数が多いほど、実行中にその関数が頻繁に観測されたことを意味します。 このメトリクスを使うとホットスポットを素早く検出できます。
メトリクスの切り替え
ツールウィンドウの右上隅にある 表示 メニューを使用します。

Go プロファイラーは、スナップショットを分析するための複数のビューを提供します:
上 :関数の集計統計を表示するフラットビューです。
グラフ :関数同士の関係を示すコールグラフです。
フレームグラフ :コールスタックを視覚化し、ホットパスを特定するのに役立ちます。
ツリー :関数呼び出しとその実行時間への寄与を階層的に示すビューです。
上
上 ビューは、関数ごとに集計されたプロファイリングデータをフラットなテーブルで表示します。 各行は関数を表し、その関数に対して記録された時間やサンプル数を示します。

このビューのデータはプロファイリングサンプルに基づいています。 各サンプルは、プログラム実行中に取得されたコールスタックを表しています。
このテーブルには次のメトリクスが含まれます:
フラット – 関数自体で記録された時間またはサンプル数です。 呼び出している関数の時間やサンプルは含まれません。
フラット% – 関数自体で記録された時間またはサンプル数の全体に対する割合です。
合計 % – フラット% の値を上から下に累計したものです。
累計 – 関数およびその呼び出し先すべてで記録された合計時間またはサンプル数です。
累計 % – 関数とその呼び出し先を含む全体の時間またはサンプルの割合です。
このビューを使ってコストの高い関数を特定できます。 まず、 フラット または 累計 の値が最も高い関数から確認してください。
これらの値は統計的サンプリングに基づいています。 各サンプルは取得されたコールスタックを表しており、数値は推定値です。
ソースコードに移動する
テーブル内の関数をクリックするとソースコードが開きます。
結果の並べ替え
カラムヘッダーをクリックすると、選択したメトリクスで関数を並べ替えられます。例えば、 フラット や 累計 です。
メトリクスの切り替え
ツールウィンドウ右上の 表示 メニューから、 CPU 時間 と サンプル を切り替えます:
サンプル は収集されたサンプル数を表示します。
CPU 時間 は同じデータを時間単位に変換して表示します。
グラフ
グラフ ビューはアプリケーションのコールグラフを表示します。 関数はノードとして表示され、ノード間の呼び出しはエッジとして表されます。

各ノードは関数を表します。 各エッジは、ある関数から別の関数への呼び出しを表します。 ノードの大きさや色は、その関数に関連付けられている時間やサンプル数を反映します。
ノードのラベルは値を 2 つ表示します。
関数自体で記録された時間またはサンプル数
関数およびその呼び出し先で記録された合計時間またはサンプル数
このビューで関数同士の呼び出し関係やコストの高いコールパスを把握できます。
ノードとエッジのフィルター
ノード数 を使って、表示する関数数を制限します。
ノードの割合 を使い、指定した割合未満の関数を非表示にできます。
エッジの割合 で、指定した割合より少ない呼び出しを非表示にできます。
適用 をクリックしてグラフを更新します。
メトリクスの切り替え
ツールウィンドウ右上の 表示 メニューから、 CPU 時間 と サンプル を切り替えます:
サンプル は収集されたサンプル数を表示します。
CPU 時間 は同じデータを時間単位に変換して表示します。
グラフのナビゲート
ノードをクリックすると、関数にフォーカスし、その接続を確認できます。
グラフをドラッグしてビューを移動します。
フレームグラフ
フレームグラフはコールスタックを長方形の集合として表示します。 各長方形は関数呼び出しを表します。 長方形の幅は、その関数が使用する時間またはサンプル数を示します。 幅の広い長方形は、より重い関数を表します。
親関数は子関数の下に表示されます。 このレイアウトにより、コードの処理フローを把握しやすくなります。

メトリクスの切り替え
ツールウィンドウ右上の 表示 メニューから、 CPU 時間 と サンプル を切り替えます:
サンプル は収集されたサンプル数を表示します。
CPU 時間 は同じデータを時間単位に変換して表示します。
グラフをズームする
拡大 (
)および 縮小 (
)アイコンを使って拡大・縮小ができます。
ブロックをダブルクリックして特定の関数にフォーカスします。
縮尺率のリセット (
)アイコンをクリックしてズームレベルをリセットします。
ビュー設定の構成
ツールバーのビュー設定メニューを開きます。
次のオプションを有効化または無効化します。
アイシクルグラフを表示 :フレームとアイシクルのレイアウトを切り替えます。
スティッキーテキスト :ズーム時に関数名を表示したままにします。
新しいフレームグラフビュー :更新済みのレンダリングモードを使用します。
シングルクリックで移動 :ワンクリックで関数を開きます。

グラフ内検索
Show Search Toolbar (
)をクリックするか、 Ctrl+F を押します。
関数名を入力すると、一致するブロックがハイライトされます。
ナビゲーションコントロールで一致する箇所を移動します。

関数の詳細を取得
ブロックにカーソルを重ねると詳細が表示されます。
ツールチップには次の情報が表示されます:
関数名。
全サンプルまたは時間に対する割合。
親関数に対する割合。
CPU Time 使用時の合計時間(ミリ秒単位)。

グラフをキャプチャする
ツールバーの Capture Image アイコン(
)をクリックします。
次のいずれかのオプションを選択します:
クリップボードにコピー :グラフを画像としてコピーします。
保存 :グラフを PNG ファイルとして保存します。
ツリー
ツリービューは関数呼び出しを階層構造で表示します。 各行は関数を表します。 子の行には親によって呼び出された関数が表示されます。
このビューを使うことで、アプリケーション内の実行フローやコールパスごとのリソース消費を把握できます。

メトリクスの切り替え
右上隅の 表示 メニューを使用します。
プロファイルタイプに応じてメトリクスを選択します。
割り当て済みオブジェクト :割り当てられたオブジェクト数。
割り当て済み領域 :割り当てられたメモリの合計。
使用中のオブジェクト :現在メモリ上にあるオブジェクト数。
使用中の領域 :現在使用中のメモリ。

ビュー設定の構成
ツールバーのビュー設定メニューを開きます。
次のオプションを有効化または無効化します。
合計時間の割合を表示 :全体プロファイルに対する割合を表示します。
親の割合を表示 :親関数に対する割合を表示します。
シングルクリックで移動 :ワンクリックでコードを開きます。

ツリーのナビゲート
コールパスを探索するためにノードを展開または折りたたみます。
メトリクスを表示する関数を選択します。
メトリクスの解釈
列を使ってリソース使用量を分析します:
フラット – 関数内で直接使用または割り当てられたメモリ。
フラット% – 関数での合計使用量に対する割合。
累計 – 関数およびその呼び出し先すべてで使用されたメモリ。
累計 % – 子呼び出しを含む合計使用量の割合。
ラインプロファイラー
スナップショットを開くと、GoLand は プロファイラー・ ツールウィンドウを表示し、エディター内の該当行付近に実行時ヒントを追加します。
実行にかなりの時間がかかった行には灰色のラベルが付けられ、最もリソースを消費するメソッドには火のアイコンが付いた赤いラベルが付けられます。

プロファイラー・ ツールウィンドウの 視聴モードを切り替えるも、エディターのラベルのモードを変更します。 メソッド全体の実行時間・CPU 時間、または行実行の結果として割り当てられたメモリ量を表示できます。
ラベル付けされたメソッドの内部を詳しく調べたい場合は、ヒントをクリックするとメソッド宣言に移動し、速度低下の原因となっている特定の行を調べることができます。
