Я знаю, что уже есть несколько потоков для профилирования памяти с помощью массива и других инструментов, но мне интересно, есть ли какие-либо инструменты или общие методы для профилирования памяти во время выполнения в производственной среде.
Можно представить реализацию, в которой каждый класс предоставляет функцию memSize (), и контейнеры расширяются, чтобы делать то же самое, вызывая memSize () для всех своих членов и добавляя их собственный размер (или оценку размера).Затем в любой момент времени вы можете запросить приложение и посмотреть, какая из ваших основных структур данных использует большую часть вашей памяти и как это меняется со временем.
К сожалению, приведенная выше стратегия может быть хитрой - вамприходится иметь дело с такими вещами, как блокировка, выравнивание памяти и т. д., и иногда вы не будете знать, насколько велика сторонняя структура данных, и вам придется угадывать.В целом, кажется, что это довольно много работы, чтобы добавить это ко всем классам ...
Итак, чтобы перейти к актуальному вопросу - каков хороший способ мониторинга использования памяти и причины роста памяти во время выполнения впроцесс производства?