Формат 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.