Pprof和golang - 如何解释结果?

时间:2015-09-14 18:20:41

标签: linux go pprof

我正在尝试在我的程序中使用pprof,但是,我的结果与我读过的文章略有不同(链接如下)。在我的结果中,我得到了这样的表格:

(pprof) top10
1.65s of 1.72s total (95.93%)
Showing top 10 nodes out of 114 (cum >= 0.01s)
      flat  flat%   sum%        cum   cum%
     1.19s 69.19% 69.19%      1.20s 69.77%  syscall.Syscall
     0.16s  9.30% 78.49%      0.16s  9.30%  runtime._ExternalCode

这列是什么:flat flat% sum% cum cum%

我正在阅读的文章: https://software.intel.com/en-us/blogs/2014/05/10/debugging-performance-issues-in-go-programs http://blog.golang.org/profiling-go-programs

2 个答案:

答案 0 :(得分:0)

我知道我会为此而烦恼,但看看GopherCon会谈; one such example on interpretation is hereUber about pprof也会发表演讲。

还有Profiling Go Programs博文。

答案 1 :(得分:0)

flat and cum

假设有一个函数foo,它由3个函数和一个直接运算组成。

func foo(){
    a()                                 step1
    b()                                 step2
    do something directly.              step3
    c()                                 step4
}

想象一下,当您调用函数foo时,它需要6秒钟,并且时间分布如下。

func foo(){
    a()                                 // step1 takes 1s
    b()                                 // step2 takes 1s
    do something directly.              // step3 takes 3s
    c()                                 // step4 takes 1s
}
  • flat是花费在步骤3上的时间。
  • cum是foo的总执行时间,它包含子函数调用和直接操作。 (暨= step1 + step2 + step3 + step4)

总和

在pprof控制台中运行top时,输出的每一行代表在特定功能上花费的时间。 Sum%表示前几行花了多少时间/内存。

为解释该指标,我选择了另一个包含更多行的示例。 sum%的第四行的值为45.17%。是这样计算的:

line1 19.33%
line2 13.27%
line3 6.60%
line4 5.97%
-----------
sum% 45.17%

enter image description here

求和百分比的应用

sum%可以帮助您快速识别大石头。以下是内存分配报告的另一个示例。

您可以看到前四个功能占用91.06%的内存。如果我想进行一些性能调整,则应专注于前四个功能。第四位以下的所有功能都可以忽略。

enter image description here

参考

Reddit: What is the meaning of "flat" and "cum" in golang pprof output