pprof(对于golang)没有显示我的包的详细信息

时间:2017-07-25 16:36:45

标签: go pprof

我一直试图用pprof来描述我的go应用程序(evm-specification-miner),但输出并不是真的有用:

(pprof) top5
108.59mins of 109.29mins total (99.36%)
Dropped 607 nodes (cum <= 0.55mins)
Showing top 5 nodes out of 103 (cum >= 0.98mins)
      flat  flat%   sum%        cum   cum%
  107.83mins 98.66% 98.66% 108.64mins 99.40%  [evm-specification-miner]
  0.36mins  0.33% 98.99%      6mins  5.49%  net.dialIP
  0.30mins  0.28% 99.27%   4.18mins  3.83%  net.listenIP
  0.06mins 0.052% 99.32%  34.66mins 31.71%  
github.com/urfave/cli.BoolFlag.ApplyWithError
  0.04mins 0.036% 99.36%   0.98mins   0.9%  net.probeIPv6Stack

这是累积输出:

(pprof) top5 --cum
1.80hrs of 1.82hrs total (98.66%)
Dropped 607 nodes (cum <= 0.01hrs)
Showing top 5 nodes out of 103 (cum >= 1.53hrs)
      flat  flat%   sum%        cum   cum%
   1.80hrs 98.66% 98.66%    1.81hrs 99.40%  [evm-specification-miner]
         0     0% 98.66%    1.53hrs 83.93%  net.IP.matchAddrFamily
         0     0% 98.66%    1.53hrs 83.92%  net.(*UDPConn).WriteToUDP
         0     0% 98.66%    1.53hrs 83.90%  net.sockaddrToUDP
         0     0% 98.66%    1.53hrs 83.89%  net.(*UDPConn).readMsg

正如您所看到的,大部分时间花费在evm-specification-miner(这是我的go应用程序的名称),但我无法获得更多细节甚至无法理解这些方括号意味着(a question有类似的问题,但它没有得到任何答案)。

以下是build和pprof命令:

go install evm-specification-miner
go tool pprof evm-specification-miner cpuprof

我甚至尝试过调试标志-gcflags "-N -l"(如此处所说:https://golang.org/doc/gdb#Introduction),但无济于事。

通过对pprof.StartCPUProfile()pprof.StopCPUProfile()的调用完成了分析,如此博客文章所述:https://blog.golang.org/profiling-go-programs

func StartProfiling(cpuprof string) error {
    f, err := os.Create(cpuprof)
    if err != nil {
        return err
    }
    return pprof.StartCPUProfile(f)
}

func StopProfiling() error {
    pprof.StopCPUProfile()
    return nil
}

StartProfilingmain()的开头调用,StopProfiling在接收到信号(中断或终止)时(或程序正常终止)。此配置文件是在中断后获得的。

1 个答案:

答案 0 :(得分:0)

看起来更新到1.9rc1修复了它。

我在配置文件中不再有[evm-specifiation-miner](对于记录,顶级函数甚至不是来自我自己的包,所以它甚至比以前没有出现过更奇怪。)