pprofとは
Go用プロファイリングツール
実行時間を計測して処理の重い箇所を調べることができるとても便利なツール
導入手順
ライブラリの取得
$ go get -u runtime/pprof $ go get -u net/http/pprof
※go modを利用していれば不要だった気がする
コードの修正
インポート部分に下記追加
import ( ... ... + _ "net/http/pprof" )
main関数に以下を追加
func main() { + runtime.SetBlockProfileRate(1) + runtime.SetMutexProfileFraction(1) + go func() { + log.Println(http.ListenAndServe("0.0.0.0:6060", nil)) + }() ... ... }
ここまでできたらほぼ完了。
依存パッケージのインストール
WebUIでグラフを見れるようにするために下記をインストール
$ apt install graphviz or $ yum install graphviz
ポート開放
WebUIを外から見れる用にするために 1080
ポートを開ける
分析データ収集
アプリケーションが動いてる状態(ISUCONならベンチマーク中)で以下のコマンドを実行しデータを収集&WebUIを起動する
$ go tool pprof -http=0.0.0.0:1080 {アプリケーションのディレクトリ} http://localhost:6060/debug/pprof/profile
プロファイルできてから再度見る場合
$ go tool pprof -http=0.0.0.0:1080 {アプリケーションのディレクトリ} {収集したファイルパス}
実行が終了したら以下のURLで見ることができる。
http://xxx.xxx.xxx.xxx:1080/
※ポートの説明
- 1080:pprofを結果を外部から見るためのポート
- 6060:pprof自体がアクセスするためのポート(外部からアクセスしないので、開けなくてよい)