Open totetotetotem opened 6 years ago
goのbuilt in profiler であるnet/http/pprofを導入する
New Relicはアクセスパスベースでボトルネックを測定する pprofはより細かい、関数単位で時間が計測でき、ボトルネックを特定することができる
http://klabgames.tech.blog.jp.klab.com/archives/pprof1-cpuprofile.html 通常はimport内にpprofを追加すればよい。(ただし、コード上では使用しないので_ "net/http/pprof"とする)
import ( _ "net/http/pprof" )
多分デフォルトなら80番で
$ go tool pprof http://127.0.0.1/debug/pprof/profile
ってできる気がしてきた
frameworkにgorillaを用いている場合には、importのアンダーバーを消去し、
func AttachProfiler(router *mux.Router) { router.HandleFunc("/debug/pprof/", pprof.Index) router.HandleFunc("/debug/pprof/cmdline", pprof.Cmdline) router.HandleFunc("/debug/pprof/profile", pprof.Profile) router.HandleFunc("/debug/pprof/symbol", pprof.Symbol) // Manually add support for paths linked to by index page at /debug/pprof/ router.Handle("/debug/pprof/goroutine", pprof.Handler("goroutine")) router.Handle("/debug/pprof/heap", pprof.Handler("heap")) router.Handle("/debug/pprof/threadcreate", pprof.Handler("threadcreate")) router.Handle("/debug/pprof/block", pprof.Handler("block")) }
を追加した上で、mainで
AttachProfiler(r)
を追加する。rはmux.NewRouter()の返り値。
この状態でビルドし、
$ go tool pprof http://127.0.0.1:35664/debug/pprof/profile
を実行した上で、ベンチを回す。 すると~/pprof以下にprofileファイルが生成されるので
$ go tool pprof app /home/isucon/pprof/pprof.127.0.0.1:35664.samples.cpu.001.pb.gz
とすることで、pprofを開くことができる。
どうやら
$ go tool pprof app
だけでもpprofを開けるらしい[要検証]
そのあとはpprofのインタラクティブシェルに入るので、
(pprof) top (pprof) peek (pprof) list main.
とかを使用して生きていく。
なにをやるか
goのbuilt in profiler であるnet/http/pprofを導入する
なぜやるか
New Relicはアクセスパスベースでボトルネックを測定する pprofはより細かい、関数単位で時間が計測でき、ボトルネックを特定することができる
どうやるか
http://klabgames.tech.blog.jp.klab.com/archives/pprof1-cpuprofile.html 通常はimport内にpprofを追加すればよい。(ただし、コード上では使用しないので_ "net/http/pprof"とする)
多分デフォルトなら80番で
ってできる気がしてきた
frameworkにgorillaを用いている場合には、importのアンダーバーを消去し、
を追加した上で、mainで
を追加する。rはmux.NewRouter()の返り値。
この状態でビルドし、
を実行した上で、ベンチを回す。 すると~/pprof以下にprofileファイルが生成されるので
とすることで、pprofを開くことができる。
どうやら
だけでもpprofを開けるらしい[要検証]
そのあとはpprofのインタラクティブシェルに入るので、
とかを使用して生きていく。