我一直在尝试将 pprof 用于 Linux 上的 Go,但没有获得任何功能信息。我究竟做错了什么?这是我的构建/运行步骤:
$ rm -f silly
$ go build -gcflags "-N -l" silly.go
$ rm -f silly.prof
$ ./silly --cpuprofile silly.prof
fib(42)=267914296
t=1.758997214s
$ go tool pprof --text silly.prof
1.75s of 1.75s total ( 100%)
flat flat% sum% cum cum%
1.75s 100% 100% 1.75s 100%
我期待 pprof 的输出中有更多细节。“t=1.75...”行表示程序运行耗时 1.75 秒,这似乎是在分析器的 100 Hz 采样率下收集样本的充足时间。
这是程序:
package main
import (
"flag"
"fmt"
"log"
"os"
"runtime/pprof"
"time"
)
func b(n int) int {
if n < 2 {
return n
} else {
return a(n-1) + b(n-2)
}
}
func a(n int) int {
if n < 2 {
return n
} else {
return a(n-1) + b(n-2)
}
}
var cpuprofile = flag.String("cpuprofile", "", "write cpu profile to file")
func main() {
flag.Parse()
if *cpuprofile != "" {
f, err := os.Create(*cpuprofile)
if err != nil {
log.Fatal(err)
}
pprof.StartCPUProfile(f)
defer pprof.StopCPUProfile()
}
t0 := time.Now()
fmt.Printf("fib(42)=%v\n", a(42))
t1 := time.Now()
fmt.Printf("t=%v\n", t1.Sub(t0))
}
我在 Red Hat Enterprise Linux Server 7.0 版上运行,使用 Go 版本 go1.4 linux/amd64。
慕婉清6462132
相关分类