我正在使用pprof分析Go应用程序。
该应用程序使用大约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和google-perftools的pprof版本2.2.1(如果这很重要)。
答案 0 :(得分:3)
您误用go tool 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):
启用CPU分析后,Go程序将停止约100次 每秒记录一个由程序计数器组成的样本 当前正在执行的goroutine的堆栈
答案 1 :(得分:-1)
有时当您的程序完成执行速度过快时会出现此问题。小心!