pprof
データを採取する
go tool pprof -seconds 60 http://localhost:1323/debug/pprof/profile
データは ~/pprof/ 以下に保存される
実はcurlできる
curl -o profile.out http://localhost:1323/debug/pprof/profile?seconds=60
任意のリクエストヘッダを入れたいならこっちが便利かも
gojiの場合 (mux)
code:main.go
import (
"net/http/pprof"
"goji.io/pat"
)
mux.HandleFunc(pat.Get("/debug/pprof/"), pprof.Index)
mux.HandleFunc(pat.Get("/debug/pprof/cmdline"), pprof.Cmdline)
mux.HandleFunc(pat.Get("/debug/pprof/profile"), pprof.Profile)
mux.HandleFunc(pat.Get("/debug/pprof/symbol"), pprof.Symbol)
プロファイルする
データを採取できたらそのままプロファイラが起動する
既に採取したデータをもとにプロファイルする場合はファイルを指定して起動する
go tool pprof pprof.isuumo.samples.cpu.004.pb.gz
可視化する
プロファイラ内でコマンドを叩く
png svg などでコールグラフを画像として出力できる
web でブラウザで開ける
-http オプションに [host]:port を指定することでサーバーを起動してブラウザで閲覧できる
go tool pprof -http=":8888" pprof.isuumo.samples.cpu.004.pb.gz
BROWSER 環境変数がないって言われても無視してよい
参考