我正在使用pprof分析Go应用程序. 该应用程序使用大约4-10%的CPU并使其运行一小段时间产生大约6-11kb的配置文件.这告诉我它应该能够对一些活动进行抽样. 但是,当我查看结果时,我看到以
该应用程序使用大约4-10%的CPU并使其运行一小段时间产生大约6-11kb的配置文件.这告诉我它应该能够对一些活动进行抽样.
但是,当我查看结果时,我看到以下内容:
$go tool pprof --text bigproc 1.77s of 1.77s total ( 100%) flat flat% sum% cum cum% 1.77s 100% 100% 1.77s 100% $
似乎缺少有趣的信息.可能有什么不对?
这是在Linux上,go版本1.6.1和pprof版本2.2.1 google-perftools(如果这很重要).
您错误地使用了go工具pprof,因为您应指定与生成的配置文件关联的可执行文件.比较一下
$go tool pprof --text cpuprofile.prof 680ms of 680ms total ( 100%) flat flat% sum% cum cum% 680ms 100% 100% 680ms 100%
有了这个(注意main,就是生成cpuprofile.prof的可执行文件)
$go tool pprof --text main cpuprofile.prof 680ms of 680ms total ( 100%) flat flat% sum% cum cum% 350ms 51.47% 51.47% 610ms 89.71% main.renderMandelbrotUnified 130ms 19.12% 70.59% 130ms 19.12% math.Log 40ms 5.88% 76.47% 60ms 8.82% image.(*RGBA).Set [cut]
这不是错误采样的问题:考虑每执行一次大约100个样本,所以即使是1.7秒,你也应该得到一些样本(from here):
When CPU profiling is enabled, the Go program stops about 100 times per second and records a sample consisting of the program counters on the currently executing goroutine’s stack