如何从 Go 配置文件中获取功能细分

我一直在尝试将 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。


心有法竹
浏览 194回答 2
2回答

慕婉清6462132

事实证明,错误是在调用 pprof 工具时省略了二进制名称。正确的调用是:$ go tool pprof --text silly silly.prof1750ms of 1750ms total (&nbsp; 100%)&nbsp; &nbsp; &nbsp; flat&nbsp; flat%&nbsp; &nbsp;sum%&nbsp; &nbsp; &nbsp; &nbsp; cum&nbsp; &nbsp;cum%&nbsp; &nbsp; 1060ms 60.57% 60.57%&nbsp; &nbsp; &nbsp;1750ms&nbsp; &nbsp;100%&nbsp; main.a&nbsp; &nbsp; &nbsp;690ms 39.43%&nbsp; &nbsp;100%&nbsp; &nbsp; &nbsp;1750ms&nbsp; &nbsp;100%&nbsp; main.b&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0&nbsp; &nbsp; &nbsp;0%&nbsp; &nbsp;100%&nbsp; &nbsp; &nbsp;1750ms&nbsp; &nbsp;100%&nbsp; main.main&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0&nbsp; &nbsp; &nbsp;0%&nbsp; &nbsp;100%&nbsp; &nbsp; &nbsp;1750ms&nbsp; &nbsp;100%&nbsp; runtime.goexit&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0&nbsp; &nbsp; &nbsp;0%&nbsp; &nbsp;100%&nbsp; &nbsp; &nbsp;1750ms&nbsp; &nbsp;100%&nbsp; runtime.main我的问题中的那行省略了silly,即要分析的二进制文件。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go