如何在谷歌分析器中查找 CPU 使用率

Posted

技术标签:

【中文标题】如何在谷歌分析器中查找 CPU 使用率【英文标题】:How to find CPU Usage in google profiler 【发布时间】:2011-06-03 12:39:14 【问题描述】:

我正在使用 Google CPU Profiling 工具。

http://google-perftools.googlecode.com/svn/trunk/doc/cpuprofile.html

在文档中给出了它

分析文本输出

文本模式的输出行如下所示:

   14   2.1%  17.2%       58   8.7% std::_Rb_tree::find

下面是解释列的方法:

此文件中的分析样本数 功能 分析百分比 此函数中的示例 百分比 函数中的分析样本 打印到现在 分析次数 此函数中的样本及其 被调用者 分析百分比 此函数中的样本及其 被调用者 函数名称

但我无法理解哪些列告诉我函数的确切 CPU 使用率或百分比?

如何获取使用 google profile 的函数的 CPU 使用情况?

【问题讨论】:

【参考方案1】:

文本模式的输出行如下所示:

会有很多行,比如collect profile:

$ CPUPROFILE=a.pprof LD_PRELOAD=./libprofiler.so ./a.out

程序a.out和这里一样:Kcachegrind/callgrind is inaccurate for dispatcher functions?

然后用 pprof top 命令分析:

$ pprof ./a.out a.pprof
Using local file ./a.out.
Using local file a.pprof.
Welcome to pprof!  For help, type 'help'.
(pprof) top
Total: 185 samples
      76  41.1%  41.1%       76  41.1% do_4
      51  27.6%  68.6%       51  27.6% do_3
      37  20.0%  88.6%       37  20.0% do_2
      21  11.4% 100.0%       21  11.4% do_1
       0   0.0% 100.0%      185 100.0% __libc_start_main
       0   0.0% 100.0%      185 100.0% dispatcher
       0   0.0% 100.0%       34  18.4% first2
       0   0.0% 100.0%       42  22.7% inner2
       0   0.0% 100.0%       68  36.8% last2
       0   0.0% 100.0%      185 100.0% main

那么,这里是什么:总样本数是 185;频率是默认值(每 10 毫秒 1 个样本;或每秒 100 个样本)。那么总运行时间约为 1.85 秒。

第一列是样本数,当 a.out 在给定函数中工作时获取。如果我们将它除以频率,我们将得到给定函数的总时间估计,例如do_4 运行约 0.8 秒

第二列是给定函数中的样本计数除以总计数,或此函数在总程序运行时间中的百分比。所以do_4 是最慢的函数(占程序总时间的 41%),do_1 仅占程序运行时间的 11%。我想你对这个专栏很感兴趣。

第三列是当前行和前行的总和;所以我们可以知道 2 个最慢的函数,do_4do_3 总共占总运行时间的 68% (41%+27%)

第 4 列和第 5 列类似于第 1 列和第 2 列;但是这些不仅会考虑给定函数本身的样本,还会考虑从给定直接和间接调用的所有函数的样本。您可以看到,main 和从它调用的所有内容占总运行时间的 100%(因为main 是程序本身;或程序调用树的根),last2 及其子项占运行时间的 36.8%(它在我的程序中的子项是:对do_4 的一半调用和对do_3 的一半调用 = 41.1 + 27.6 /2 = 69.7/2 ~= 34% + 函数本身的一些时间)

PS:还有一些其他有用的 pprof 命令,例如 callgrindgv,它们显示了添加了分析信息的调用树的图形表示。

【讨论】:

以上是关于如何在谷歌分析器中查找 CPU 使用率的主要内容,如果未能解决你的问题,请参考以下文章

如何在谷歌云存储中启用实时对象访问分析?

如何使用 C# 中的 Nuget 包在谷歌分析中创建自定义维度和自定义指标

Android:应用内购买 - 谷歌分析

Html 资源状态 - 来自缓存与未修改 - 在谷歌浏览器 DOM 分析器中

jquery 地址和阻止谷歌分析跟踪?

如何调试nodejs程序 在谷歌浏览器