Question

There is a pprof utility in google-perftools package. It is utility to convert profile files from google-perftools cpuprofiler and heapprofiler into beautiful images: like https://github.com/gperftools/gperftools/tree/master/doc/pprof-test-big.gif and https://github.com/gperftools/gperftools/tree/master/doc/heap-example1.png

The format of pprof's input file is described for cpu profiles here: https://github.com/gperftools/gperftools/tree/master/doc/cpuprofile-fileformat.html

but the format of heap profile input files is not described in the svn.

What is the "heapprofiling" format and how can I generate such file from my code? I already can generate cpuprofiler format, so I interested what are the difference between two formats.

Was it helpful?

Solution

Seems the format is not binary as for cpu profiler, but textual:

First line:

 heap profile:   1:   2 [ 3:  4] @ heapprofile

Regex (not full)

 (\d+): (\d+) \[(\d+): (\d+)\] @ ([^/]*)(/(\d+))?)?

where

  • 1 & 2 is "in-use stats"; first number is count of allocations, second is byte count
  • 3 & 4 is "total allocated stats"; first and second with same meaning
  • heapprofile is the type

Then a profile itself follows in lot of lines:

 1: 2 [ 3: 4] @ 0x00001 0x00002 0x00003

where "1: 2" and "3: 4" is of the same meaning as in first line; but only malloced from given callsite; 0x00001 0x00002 is callstack of the callsite.

Then empty line and "MAPPED_LIBRARIES:". From the next line something very like copy of the /proc/pid/maps follows.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top