Go CPU配置文件缺少函数调用信息

时间:2016-07-19 17:39:42

标签: go profiling

我一直试图根据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%

我是以一种非常错误的方式做某事吗?

1 个答案:

答案 0 :(得分:1)

你错过了pprof的二进制参数:

go tool pprof --text miniprofile prof