pprof プロファイルを読む
プロファイルを収集した後、 Go のパフォーマンス最適化 ツールウィンドウで解析できる
プロファイラーはプログラム実行時のサンプリングデータを表示します。 各サンプルは取得されたコールスタックを表しており、すべての値は統計的サンプリングに基づいた推定値です。
データは、テーブル やコールグラフ、またはフレームグラフなど異なる形式で表示できます。 各ビューは異なるパフォーマンス面をハイライトし、高コストな関数や呼び出しパスを見つけるのに役立つ
サンプルタイプを切り替える
ツールウィンドウの右上隅にある 表示 メニューを使用します。

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

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

各ノードは関数を表します。 各エッジは、ある関数から別の関数への呼び出しを表します。
メモリプロファイルでは、グラフに関数呼び出し間の割り当て済みメモリブロックを示すコンパクトな割り当てノードが含まれる場合がある

各ノードのラベルには値が 2 つ表示される:
関数自体で記録された値
関数と、それが呼び出すすべての関数で記録された合計値
このビューで関数同士の呼び出し関係やコストの高いコールパスを把握できます。
グラフ表示を設定する
右上隅の 構成 をクリックします。
グラフオプションを構成します:
ノード数 は表示される関数の数を制限します。
ノードの割合 は、全サンプルの指定された割合未満の寄与しかない関数を非表示にします。
エッジの割合 は、全サンプルの指定された割合未満の寄与しかない呼び出しを非表示にします。
呼び出しツリー でグラフ上での関数の表示方法を制御します。
このオプションが無効化されている場合、同じ関数のノードが単一のノードにまとめられる 有効化されている場合は、それぞれの呼び出しが別々に表示されるので、異なる呼び出しパスを区別しやすくなります。
例えば、関数
foo()がプログラム内の異なる場所から呼び出されている場合、デフォルトのグラフではfoo()の単一ノードのみが表示されるが、 呼び出しツリー を有効化するとfoo()への各呼び出しが別ノードとして現れる
適用 をクリックしてグラフを更新します。

グラフのナビゲート
ノードをクリックすると、関数にフォーカスし、その接続を確認できます。
ノードをダブルクリックするとエディターでその関数が開く
グラフをドラッグしてビューを移動します。 右マウスボタンを使うか、 Ctrl を押しながら左または右マウスボタンでドラッグできます。
グラフ内検索
Ctrl+F を押すか、左ツールバーの グラフ内で検索 (
)をクリックします。
関数名の入力を開始する
検索ポップアップにはすべてのグラフノードが表示され、選択した関数に移動します。
フレームグラフ
フレームグラフはコールスタックを長方形の集合として表示します。 各長方形は関数呼び出しを表します。 長方形の幅は、その関数が使用する時間またはサンプル数を示します。 幅の広い長方形は、より重い関数を表します。
親関数は子関数の下に表示されます。 このレイアウトにより、コードの処理フローを把握しやすくなります。

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

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

関数の詳細を取得
ブロックにカーソルを重ねると詳細が表示されます。

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

ビュー設定の構成
ツールバーのビュー設定メニューを開きます。
次のオプションを有効化または無効化します。
合計値に対する割合を表示 :すべてのサンプル値の合計が表示されます。
親の割合を表示 :親関数に対する割合を表示します。
シングルクリックで移動 :ワンクリックでコードが開きます。

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

プロファイラー・ ツールウィンドウで表示モードを切り替えると、エディターのラベルのモードも変更されます。 関数の合計実行時間、CPU 時間、またはこの行の実行による割り当てメモリ量のいずれかを表示できます。
ラベル付けされた関数の中身を詳しく見たい場合は、ヒントをクリックすると関数宣言に移動でき、速度低下の原因となっている特定の行を確認できます。
