当我用Linux的time实用工具测量Go程序的运行时,我得到以下输出:
real 1m9.177s
user 7m1.788s
sys 0m39.016s当我查看Go的pprof CPU分析器中相同的程序执行的输出时,我得到了以下输出:
Entering interactive mode (type "help" for commands)
(pprof) top
143.32s of 176s total (81.43%)这个176 s的数字是从哪来的呢?它既不是时钟时间,也不是CPU时间。我正在运行这个GOMAXPROCS设置为8的程序,我有一种感觉,这与它有关。pprof究竟如何度量运行时,以及为什么它与linux的time不同?
发布于 2017-02-23 06:48:48
time实用程序和pprof工具以不同的方式运行,应该以不同的方式使用。不要试图调和它们。time测量程序的精确时间;pprof度量函数和方法的相对时间。pprof是一个侵入性统计样本。当启用CPU分析时,Go程序每秒大约停止100次,并在当前执行的goroutine的堆栈上记录一个由程序计数器组成的示例。抽样是有代价的,结果是对实际人口的估计。
使用time来度量整个程序的实际CPU时间,即绝对时间。使用pprof估计大部分时间是在函数和方法中使用的,使用相对时间百分比。pprof标识瓶颈。对于实际的CPU时间,请使用Go testing包基准测试。
有关示例,请参见剖析Go程序
通过使用Go的分析工具来识别和纠正特定的瓶颈,我们可以使Go循环查找程序运行的速度快一个数量级,并且使用的内存减少了6倍。
发布于 2017-04-16 19:52:42
这看起来像是什么虫子。可能是已知的窃听器。为了输出176 s,pprof所做的是将已知的采样周期乘以样本数。它应该是合理准确的w.r.t。进程所花费的总cpu时间(系统+用户)。
您的程序是否有可能通过子进程产生一些工作?这可能是解释差异的一种方法。
https://stackoverflow.com/questions/42406702
复制相似问题