我正在尝试在我的程序中使用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
答案 0 :(得分:0)
我知道我会为此而烦恼,但看看GopherCon会谈; one such example on interpretation is here,Uber about pprof也会发表演讲。
答案 1 :(得分:0)
假设有一个函数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%
sum%
可以帮助您快速识别大石头。以下是内存分配报告的另一个示例。
您可以看到前四个功能占用91.06%的内存。如果我想进行一些性能调整,则应专注于前四个功能。第四位以下的所有功能都可以忽略。
Reddit: What is the meaning of "flat" and "cum" in golang pprof output