Go 堆图的解释

Go 堆图的解释,go,pprof,heap-profiling,Go,Pprof,Heap Profiling,当我在go with pprof中分析堆时,我得到以下结果: 然而,我不清楚如何解释这种可视化。特别是: “箭头旁边的内存意味着________;而方框内的内存意味着___;。因此,当一个方框中有多个箭头时,它意味着____;,当它有多个箭头指向它时,它意味着” 此函数的感知累积内存消耗包括其所有子函数 此功能的感知内存消耗不包括其所有子功能 它调用多个子函数 多个函数调用它 堆和CPU分析模式之间箭头的含义没有区别 您可能对toppprof命令的输出感兴趣,该命令可以以以下形式给出结果: 9

当我在go with pprof中分析堆时,我得到以下结果:

然而,我不清楚如何解释这种可视化。特别是:

“箭头旁边的内存意味着________;而方框内的内存意味着___;。因此,当一个方框中有多个箭头时,它意味着____;,当它有多个箭头指向它时,它意味着”

  • 此函数的感知累积内存消耗包括其所有子函数
  • 此功能的感知内存消耗不包括其所有子功能
  • 它调用多个子函数
  • 多个函数调用它
  • 堆和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
    
    总9701.61kB中的9701.61kB(100%)丢弃了112个节点(cum=3611.54kB) 单位百分比总和百分比总和百分比 4549.72kB 46.90%46.90%4549.72kB 46.90%summary.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%压缩/gzip.NewReader 514kB 5.30%94.72%514kB 5.30%net/http。(*传输)。拨号连接 512.34kB 5.28%100%512.34kB 5.28%runtime.makeslice 0 0%100%514kB 5.30%字节。(*缓冲区)。读取自 0 0%100%3611.54kB 37.23%编码/xml。(*解码器)。解码 0 0%100%3611.54kB 37.23%编码/xml。(*解码器)。解码元素 0 0%100%3611.54kB 37.23%编码/xml。(*解码器)。解组 以下是(IMHO)使用pprof进行Go堆评测的两个最佳参考:


  • 哦,上下文是这个二进制文件的一个实例正在慢慢地泄漏内存。我有这张快照,几个小时后我会再拍一张,比较一下。除非泄漏不在堆中,否则我不确定下一步该怎么办。因为Go有一个精确的GC,“泄漏”几乎总是涉及不返回的goroutine。堆栈跟踪通常比堆配置文件更有用。@JimB我监视goroutine的数量(具有讽刺意味的是,使用缓慢消耗更多内存的东西),并且例程的数量是稳定的。