1

I'm kinda new to pprof. I've started CPU profiling, and after a bit of time checked the top25. This is what I got:

Showing top 25 nodes out of 174
      flat  flat%   sum%        cum   cum%
  1.01mins 21.92% 21.92%   1.10mins 23.83%  time.Time.AppendFormat
  0.26mins  5.56% 27.48%   0.26mins  5.56%  type..eq.[65]runtime.sigTabT
  0.23mins  5.07% 32.55%   0.23mins  5.07%  type..hash.[3]runtime.symbol_key
  0.15mins  3.14% 35.69%   0.15mins  3.14%  type..hash.[9]string
  ...

I thought that's all cool, I just need to get rid of that time function. Then realized, I don't even use anything from the time pkg, so it must be either a third party lib, or one of the go internal functions.

So I've generated the graph with the -web flag, so I can see which function calls it, but it doesn't really show directly. Is there any way to track it down where it's coming from?

Jonathan Hall
  • 75,165
  • 16
  • 143
  • 189
Andrew
  • 2,063
  • 3
  • 24
  • 40
  • what's the type of the generated image? ( e.g. -inuse_space Display in-use memory size -inuse_objects Display in-use object counts -alloc_space Display allocated memory size -alloc_objects Display allocated object counts) – vitr Apr 11 '18 at 12:47
  • currently, all external tools using entire pprof possibilities, so I thing you can find everything inside pprof docs – B.Zamalutdinov Apr 11 '18 at 10:58

1 Answers1

3

I've been using the following approach to see everything.

go tool pprof -http :9999 -edgefraction 0 -nodefraction 0 -nodecount 100000 cpu.prof

This can give you a huge graph which can be quite difficult to follow. To help with that you can click on the offending node in the web view and select 'Focus' from the 'Refine' menu in the top left corner. This provides a view of that node and all its callers and callees.

The key options to use in order to see everything are:

--nodecount=<n>    Show at most so many nodes [default=80]
--nodefraction=<f> Hide nodes below <f>*total [default=.005]
--edgefraction=<f> Hide edges below <f>*total [default=.001]

You can also use -focus on the command line to speed up rendering of large graphs.

--focus=<regexp> Focus on nodes matching <regexp>
PiersyP
  • 5,003
  • 2
  • 33
  • 35