簡體   English   中英

Pprof和golang - 如何解釋結果?

[英]Pprof and golang - how to interpret a results?

我試圖在我的程序中使用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-走的程序

平和暨

假設有一個函數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將花費在第三步的時間。
  • cum將是foo的總執行時間,其中包含子函數調用和直接操作。 (cum = 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:golang pprof輸出中“flat”和“cum”的含義是什么?

我知道我會為此而煩惱,但看看GopherCon會談; 這里一個關於解釋的例子 ,也有來自優步的關於pprof的談話。

還有Profiling Go Programs博客文章。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM