pprof プロファイルを読む
プロファイルを収集した後、 Go の最適化 ツールウィンドウで解析できる
CPU、ヒープ、Allocs、Block、Mutex のプロファイルはサンプリングデータを使用するため、値は推定値です。 Goroutine と Goroutine Leak のプロファイルは、キャプチャ時に報告されるゴルーチンのスナップショットです。
データは、テーブル やコールグラフ、またはフレームグラフなど異なる形式で表示できます。 各ビューは異なるパフォーマンス面をハイライトし、高コストな関数や呼び出しパスを見つけるのに役立つ
デフォルトでは、GoLand は フレームグラフ ビューでプロファイルを開きます。
サンプルタイプを切り替える
ツールウィンドウの右上隅にある 表示 メニューを使用します。

Go プロファイラーは、スナップショットを分析するための複数のビューを提供します:
上 :関数の集計統計を表示するフラットビューです。
グラフ :関数同士の関係を示すコールグラフです。
フレームグラフ :コールスタックを視覚化し、ホットパスを特定するのに役立ちます。
ツリー: 関数呼び出しの階層ビューです。 選択したサンプルタイプに応じて、CPU 時間、メモリ、遅延、またはカウントを表示します。
上
上 ビューは、関数のプロファイリングデータをフラットなテーブルで表示します。 各行は関数を表します。

このビューは、選択したプロファイルのデータを集計します。 サンプリングを使用するプロファイルの場合、数値は推定値です。
選択したサンプルタイプによって、数値が何を示すかが決まります:
CPU 時間: CPU 実行時間。
割り当て済み領域 と 使用中の領域: バイト単位のメモリ。
遅延: ゴルーチンが待機に費やした時間。
サンプル: 関数を含むスタックサンプルの数。
割り当て済みオブジェクト と 使用中のオブジェクト: オブジェクトの数。
争い: ロックまたは別の同期操作の待機回数。
ゴルーチン と ゴルーチンリーク: スタックトレースを持つゴルーチンの数。
このテーブルには次のメトリクスが含まれます:
フラット – 関数自体の CPU 時間、メモリ、遅延、またはカウント。 呼び出し先関数のデータは含まれません。
フラット% – 関数自体の CPU 時間、メモリ、遅延、またはカウントが合計に占める割合。
合計 % – フラット% の値を上から下に累計したものです。
累計 – 関数と、その関数が呼び出すすべての関数の合計 CPU 時間、メモリ、遅延、またはカウント。
累計 % – 関数とその呼び出し先の CPU 時間、メモリ、遅延、またはカウントが合計に占める割合。
このビューを使ってコストの高い関数を特定できます。 まず、 フラット または 累計 の値が最も高い関数から確認してください。
ソースコードに移動する
テーブル内の関数をクリックするとソースコードが開きます。
結果の並べ替え
カラムヘッダーをクリックすると、選択したメトリクスで関数を並べ替えられます。例えば、 フラット や 累計 です。
上部で検索する
関数名を入力すると、一致するブロックがハイライトされます。
グラフ
グラフ ビューはアプリケーションのコールグラフを表示します。 関数はノードとして表示され、ノード間の呼び出しはエッジとして表されます。

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

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

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

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

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

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

グラフをキャプチャする
ツールバーの Capture Image アイコン(
)をクリックします。
次のいずれかのオプションを選択します:
クリップボードにコピー :グラフを画像としてコピーします。
保存 :グラフを PNG ファイルとして保存します。
ツリー
ツリービューは関数呼び出しを階層構造で表示します。 各行は関数を表します。 子の行には親によって呼び出された関数が表示されます。
ビューは、呼び出しパスを理解し、CPU やメモリを最も多く使用する関数、待機時間が最も長い関数、または最も多くのサンプルやゴルーチンスタックに現れる関数を見つけるのに役立ちます。

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

ツリーのナビゲート
コールパスを探索するためにノードを展開または折りたたみます。
メトリクスを表示する関数を選択します。
メトリクスの解釈
列を使ってリソース使用量を分析します:
フラット – 関数自体の CPU 時間、メモリ、遅延、またはカウント。
フラット% – 関数自体の CPU 時間、メモリ、遅延、またはカウントが合計に占める割合。
累計 – 関数とそのすべての呼び出し先の合計 CPU 時間、メモリ、遅延、またはカウント。
累計 % – 関数とその呼び出し先の CPU 時間、メモリ、遅延、またはカウントが合計に占める割合。
ツリーで検索する
関数名を入力すると、一致するブロックがハイライトされます。
スナップショットを移動する
特定のメソッドに注目したまま、タブ間を移動できます。 必要なメソッドを右クリックし、開きたい他のビューを選択します。

ラインプロファイラー
サポート対象の pprof 互換プロファイルを開くと、GoLand は Go の最適化 ツールウィンドウを表示し、エディター内の対応する行の近くにランタイムヒントを追加します。
インポートしたプロファイルの場合、GoLand は現在のソースをベースラインとして使用します。 プロファイルとソース行が一致することを確認できない場合、警告が表示されます。
重要な値を持つ行には灰色のラベルが付き、値が最も高い行には火のアイコン付きの赤いラベルが付きます。

Go の最適化 ツールウィンドウでサンプルタイプを切り替えると、エディター内のラベルも変更されます。 ラベルには、CPU 時間、割り当て済みメモリ、遅延、カウントなど、選択したサンプルタイプの値が表示されます。
ラベル付きの関数を調べるには、そのヒントをクリックします。 IDE は宣言を開き、そこで選択した値に寄与する行を調べることができます。
