Формат google-perftools / pprof с профилированием кучи - PullRequest
2 голосов
/ 10 ноября 2011

В пакете google-perftools есть утилита pprof.Это утилита для преобразования файлов профиля из gp-perftools cpuprofiler и heapprofiler в красивые изображения, такие как https://github.com/gperftools/gperftools/tree/master/doc/pprof-test-big.gif и https://github.com/gperftools/gperftools/tree/master/doc/heap-example1.png

Формат входного файла pprof для профилей процессора описан здесь: https://github.com/gperftools/gperftools/tree/master/doc/cpuprofile-fileformat.html

, но формат входных файлов heap profile не описан в svn.

Что такое формат "heapprofiling" и как я могу сгенерировать такой файл из своего кода?Я уже могу генерировать формат cpuprofiler, поэтому мне интересно, в чем разница между двумя форматами.

1 Ответ

3 голосов
/ 10 ноября 2011

Кажется, что формат не двоичный, как для профилировщика процессора, а текстовый:

Первая строка:

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

Регулярное выражение (не полное)

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

где

  • 1 & 2 - это «статистика использования»;первое число - это количество распределений, второе - количество байтов
  • 3 и 4 - "общая распределенная статистика";первый и второй с одинаковым значением
  • heapprofile имеет тип

Тогда сам профиль следует в виде множества строк:

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

где "1: 2"и «3: 4» имеет то же значение, что и в первой строке;но только выловлен из данного места вызова;0x00001 0x00002 - это стек вызовов для места вызова.

Затем пустая строка и "MAPPED_LIBRARIES:".Из следующей строки следует нечто очень похожее на копию / proc / pid / maps.

...