Skip to content

pprofの読み方

プロファイルの読み方。Goベンチマークの読み方(CPU編)Goベンチマークの読み方(メモリ編)もある。

手書きした場合はstartからstopまでのプロファイルを取る。net/http/pprof をimportした場合は、/debug/pprof/profile にアクセスしてから少し後までのプロファイルを取るらしい。

Terminal window
(pprof) top
flat flat% sum% cum cum%
30s 99.93% 99.93% 30s 99.93% main.main
  • flat: 関数単体の実行時間(複数回呼ばれるなら合計?
  • flat%: 関数単体の実行時間割(関数呼び出しは含まない)
  • sum%: 上位N個の flat% を合計したもの
  • cum: その関数から呼ばれる他の関数も含めた実行時
  • cum%: cum の割

flat が遅い場合はアルゴリズムが問題、cum が遅い場合は関数の呼び出し方に問題がある。

基本は箱が大きいものがリソース消費も大きい。-base オプションで2つのプロファイルを比較することもできて、その場合は赤→灰→緑で良好。

  • 初手でcpuプロファイルのtopをみて対策が必要な関数を決める
    • mallocgcとか madvise が目立つようならメモリプロファイルのtopをみる
    • それ以外なら flat%cum% の上位いくつかをみる
  • パッケージを決めたらgo test [-cpuprofile] [-memprofile]でベンチを取りつつ作業する
  • 満足すれば終わり、満足しなければ次の関数を決める