Формат google-perftools/pprof с профилированием кучи

В пакете 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 ответ

Решение

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

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

 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.

Другие вопросы по тегам