2016-03-08 70 views
3

當我pprof配置文件堆在旅途中我得到以下幾點:解釋pprof堆圖

enter image description here

不過,我不是如何解釋清楚的可視化。特別是:

「箭頭旁邊的記憶意味着_____,盒子裏面的記憶意味着______,所以當一個盒子有多個箭頭時,意味着_____,當它有多個箭頭時,意味着_____「。

+0

哦,上下文是這個二進制文件的一個實例正在緩慢地泄漏內存。我有這個快照,並且將在幾個小時內拿出另一個比較它們。除非事實證明泄漏不在堆中,否則我不知道下一步該做什麼。 –

+0

由於Go具有精確的GC,因此「泄漏」幾乎總是涉及不返回的goroutines。堆棧跟蹤通常比堆配置文件更有幫助。 – JimB

+0

@JimB我監視goroutines的數量雖然(具有諷刺意味的是,使用緩慢消耗更多內存的東西),並且例程的數量是穩定的。 –

回答

5
  1. 包括其所有子功能這一功能的感知累計內存消耗
  2. 此功能排除其所有子功能的感知內存消耗
  3. ,它調用多個子功能
  4. 那多種功能稱之爲

堆和CPU分析模式之間的箭頭的含義。

您可能感興趣的top pprof命令的輸出,它可以給你在下面的表單結果:

9701.61kB of 9701.61kB total ( 100%) Dropped 112 nodes (cum <= 
48.51kB) Showing top 10 nodes out of 29 (cum >= 3611.54kB) 
     flat flat% sum%  cum cum% 
4549.72kB 46.90% 46.90% 4549.72kB 46.90% mystery.function 
2587.52kB 26.67% 73.57% 2587.52kB 26.67% reflect.unsafe_NewArray 
1024.02kB 10.56% 84.12% 1024.02kB 10.56% encoding/xml.copyValue 
    514kB 5.30% 89.42%  514kB 5.30% compress/gzip.NewReader 
    514kB 5.30% 94.72%  514kB 5.30% net/http.(*Transport).dialConn 
    512.34kB 5.28% 100% 512.34kB 5.28% runtime.makeslice 
     0  0% 100%  514kB 5.30% bytes.(*Buffer).ReadFrom 
     0  0% 100% 3611.54kB 37.23% encoding/xml.(*Decoder).Decode 
     0  0% 100% 3611.54kB 37.23% encoding/xml.(*Decoder).DecodeElement 
     0  0% 100% 3611.54kB 37.23% encoding/xml.(*Decoder).unmarshal 

這裏是(恕我直言)與pprof轉到堆紋最好的兩個引用:

  1. https://google-perftools.googlecode.com/svn/trunk/doc/heapprofile.html
  2. https://software.intel.com/en-us/blogs/2014/05/10/debugging-performance-issues-in-go-programs