我一直试图根据https://software.intel.com/en-us/blogs/2014/05/10/debugging-performance-issues-in-go-programs等文章深入研究Go(golang)效果分析。
但是,在实际的配置文件程序中,生成的CPU配置文件信息非常少。 go工具要么告诉配置文件是空的,要么没有任何函数调用的信息。这在OS X和Linux上都会发生。
我生成了这种情况的一个最小例子 - 我也以类似的方式收集个人资料,并在实际程序中面对同样的问题。
以下是miniprofile/main.go
的源代码:
package main
import (
"fmt"
"os"
"runtime/pprof"
)
func do_something(prev string, limit int) {
if len(prev) < limit {
do_something(prev+"a", limit)
}
}
func main() {
f, err := os.Create("./prof")
if err != nil {
fmt.Println(err)
os.Exit(1)
}
pprof.StartCPUProfile(f)
defer pprof.StopCPUProfile()
do_something("", 100000)
}
我希望看到一个CPU配置文件,告诉我几乎所有的时间花在了对do_something的不同递归调用上。
然而,这种情况发生(上面的最小应用程序称为miniprofile) - 不是很有用:
$ go version
go version go1.6.2 darwin/amd64
$ go install .
$ miniprofile
$ go tool pprof --text prof
1.91s of 1.91s total ( 100%)
flat flat% sum% cum cum%
1.91s 100% 100% 1.91s 100%
我是以一种非常错误的方式做某事吗?
答案 0 :(得分:1)
你错过了pprof的二进制参数:
go tool pprof --text miniprofile prof