golangで待ち時間込みのプロファイリングをする
golang で プロファイリング するときによく使われる net/http/pprof はCPU時間の長さしか見せてくれないので、IOの待ち時間は無視されてしまう。どうにかしてIOの待ち時間も見れるようになりたい。 CPU boundな計算であるフィボナッチ数列の計算のみがfeatureされている
code:pprof_normal
Saved profile in /home/sangenya/pprof/pprof.main.samples.cpu.001.pb.gz
File: main
Type: cpu
Time: Aug 24, 2020 at 11:44am (JST)
Duration: 1mins, Total samples = 7.15s (11.92%)
Entering interactive mode (type "help" for commands, "o" for options)
(pprof) list handleA
Total: 7.15s
ROUTINE ======================== main.handleA in /home/sangenya/dev/goprof/main.go
0 7.15s (flat, cum) 100% of Total
. . 12:}
. . 13:
. . 14:func handleA(w http.ResponseWriter, r *http.Request) {
. . 15: sleeper()
. . 16: requester()
. 7.15s 17: fib(45)
. . 18:}
. . 19:
. . 20:func sleeper() {
. . 21: time.Sleep(time.Second * 10)
. . 22:}
main関数の冒頭でSetBlockProfileRate(1)を入れた場合
だめみたいですね...
code:pprof_set_block_profile_rate
Saved profile in /home/sangenya/pprof/pprof.main.samples.cpu.002.pb.gz
File: main
Type: cpu
Time: Aug 24, 2020 at 11:50am (JST)
Duration: 1mins, Total samples = 7.13s (11.88%)
Entering interactive mode (type "help" for commands, "o" for options)
(pprof) list handleA
Total: 7.13s
ROUTINE ======================== main.handleA in /home/sangenya/dev/goprof/main.go
0 7.12s (flat, cum) 99.86% of Total
. . 14:}
. . 15:
. . 16:func handleA(w http.ResponseWriter, r *http.Request) {
. . 17: sleeper()
. . 18: requester()
. 7.12s 19: fib(45)
. . 20:}
. . 21:
. . 22:func sleeper() {
. . 23: time.Sleep(time.Second * 10)
. . 24:}
fgprofを使う
https://gyazo.com/b2d6f3475dd5f7a35e03cf4dce78ad56