pprofの読み方
プロファイルの読み方。Goベンチマークの読み方(CPU編)やGoベンチマークの読み方(メモリ編)もある。
CPUプロファイル
Section titled “CPUプロファイル”手書きした場合はstartからstopまでのプロファイルを取る。net/http/pprof をimportした場合は、/debug/pprof/profile にアクセスしてから少し後までのプロファイルを取るらしい。
(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つのプロファイルを比較することもできて、その場合は赤→灰→緑で良好。
手癖でやっていること
Section titled “手癖でやっていること”- 初手でcpuプロファイルのtopをみて対策が必要な関数を決める
- mallocgcとか madvise が目立つようならメモリプロファイルのtopをみる
- それ以外なら flat% と cum% の上位いくつかをみる
- パッケージを決めたら
go test [-cpuprofile] [-memprofile]でベンチを取りつつ作業する- ベンチはbenchstatとbenchcmpで比較する
- 満足すれば終わり、満足しなければ次の関数を決める