为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
心有法竹 2021-09-13 10:25:39
我一直在尝试将 pprof 用于 Linux 上的 Go,但没有获得任何功能信息。我究竟做错了什么?这是我的构建/运行步骤:$ rm -f silly$ go build -gcflags "-N -l" silly.go$ rm -f silly.prof$ ./silly --cpuprofile silly.proffib(42)=267914296t=1.758997214s$ go tool pprof --text silly.prof1.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 mainimport (    "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。
查看完整描述

2 回答

?
慕婉清6462132

TA贡献1804条经验 获得超2个赞

事实证明,错误是在调用 pprof 工具时省略了二进制名称。正确的调用是:


$ go tool pprof --text silly silly.prof

1750ms of 1750ms total (  100%)

      flat  flat%   sum%        cum   cum%

    1060ms 60.57% 60.57%     1750ms   100%  main.a

     690ms 39.43%   100%     1750ms   100%  main.b

         0     0%   100%     1750ms   100%  main.main

         0     0%   100%     1750ms   100%  runtime.goexit

         0     0%   100%     1750ms   100%  runtime.main

我的问题中的那行省略了silly,即要分析的二进制文件。


查看完整回答
反对 回复 2021-09-13
  • 2 回答
  • 0 关注
  • 193 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信