## Memory tracker https://a.yandex-team.ru/arc/trunk/arcadia/library/cpp/actors/util/memory_track.h Использование: * отслеживание аллокаций экземпляров конкретного класса через new/delete и new[]/delete[] * отслеживание аллокаций в контейнерах * ручное отслеживание моментов аллокации/деаллокации ---- ### Отслеживание аллокаций класса через new/delete Использование с автоматически генерируемой меткой: ```cpp #include struct TTypeLabeled : public NActors::NMemory::TTrack { char payload[16]; }; ``` Использование с пользовательским именем метки: ```cpp #include static const char NamedLabel[] = "NamedLabel"; struct TNameLabeled : public NActors::NMemory::TTrack { char payload[32]; }; ``` ---- ### Отслеживание аллокаций в контейнерах ```cpp #include static const char InContainerLabel[] = "InContainerLabel"; struct TInContainer { char payload[16]; }; std::vector> vecT; std::vector> vecN; using TKey = int; std::map, NActors::NMemory::TAlloc>> mapT; std::map, NActors::NMemory::TAlloc, InContainerLabel>> mapN; std::unordered_map, std::equal_to, NActors::NMemory::TAlloc>> umapT; std::unordered_map, std::equal_to, NActors::NMemory::TAlloc, InContainerLabel>> umapN; ``` ---- ### Ручное отслеживание аллокаций/деаллокаций ```cpp #include static const char ManualLabel[] = "ManualLabel"; ... NActors::NMemory::TLabel::Add(size); ... NActors::NMemory::TLabel::Sub(size); ``` ---- ### Собираемые метрики Сервис **utils**, пользовательская метка **label**, сенсоры: - MT/Count: количество аллокаций в моменте - MT/Memory: аллоцированная память в моменте - MT/PeakCount: пиковое значение количества аллокаций (сэмплится с фиксированной частотой) - MT/PeakMemory: пиковое значение аллоцированной памяти