首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Go剖析器(pprof)时间偏差

Go剖析器(pprof)时间偏差
EN

Stack Overflow用户
提问于 2017-02-23 03:53:06
回答 2查看 962关注 0票数 2

当我用Linux的time实用工具测量Go程序的运行时,我得到以下输出:

代码语言:javascript
复制
real    1m9.177s
user    7m1.788s
sys     0m39.016s

当我查看Go的pprof CPU分析器中相同的程序执行的输出时,我得到了以下输出:

代码语言:javascript
复制
Entering interactive mode (type "help" for commands)
(pprof) top
143.32s of 176s total (81.43%)

这个176 s的数字是从哪来的呢?它既不是时钟时间,也不是CPU时间。我正在运行这个GOMAXPROCS设置为8的程序,我有一种感觉,这与它有关。pprof究竟如何度量运行时,以及为什么它与linux的time不同?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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倍。

票数 3
EN

Stack Overflow用户

发布于 2017-04-16 19:52:42

这看起来像是什么虫子。可能是已知的窃听器。为了输出176 s,pprof所做的是将已知的采样周期乘以样本数。它应该是合理准确的w.r.t。进程所花费的总cpu时间(系统+用户)。

您的程序是否有可能通过子进程产生一些工作?这可能是解释差异的一种方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42406702

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档