Профилирование памяти

Материал из Документация Ключ-АСТРОМ
Версия от 21:58, 31 июля 2024; IKuznetsov (обсуждение | вклад) (Новая страница: «Профилирование памяти позволяет понять поведение приложений при выделении памяти и сбо...»)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)

Профилирование памяти позволяет понять поведение приложений при выделении памяти и сборке мусора с течением времени. Оно помогает определить вызовы методов в контексте, в котором было выделено больше всего памяти, и объединить эту информацию с количеством выделенных объектов. Перспектива Survivor помогает понять контекст, в котором создаются долгоживущие объекты (объекты, пережившие несколько циклов сборки мусора).

У вас есть следующие возможности доступа к профилированию памяти:

  • с помощью диагностических инструментов
    1. Перейдите в раздел Профилирование и выберите Непрерывное профилирование ЦП.
    2. В столбце Действия необходимой группы процессов выберите Дополнительно ( … ) > Выделение памяти.

175.png

176.png

Вы можете выбрать любой таймфрейм для анализа, независимо от глобального таймфрейма. Мы рекомендуем вам исключить сторонние библиотеки из анализа, чтобы сосредоточиться на коде, который находится под вашим контролем.

Все распределения

Представление Все распределения показывает, сколько раз выполнялась сбор мусора и сколько памяти выделено. Внизу страницы вы можете найти различные параметры анализа, такие как Выделение хотспоты, График пламени, API-интерфейсы хотспотов.

Выделение хотспоты

На вкладке Выделенные хотспоты в таблице показаны методы анализируемого процесса, потребляющие большую часть памяти.

177.png

График пламени

График пламени — это тип столбчатой ​​диаграммы, которая показывает иерархические данные. График пламени повышает читаемость трассировок стека с нисходящим макетом и помогает определить горячие точки распределения памяти в коде вашего приложения.

  • Ось X охватывает память, выделенную для метода. Более широкий блок означает, что для метода выделено больше памяти.
  • Ось Y представляет глубину стека. Трассировка стека отображается в виде столбца ячеек, где каждая ячейка представляет метод.
  • Цвета зависят от настроенных определений API.

Выбрав поле метода, вы можете скрыть верхние уровни, чтобы сосредоточить свой анализ, начиная с выбранного метода.

API-интерфейсы хотспотов

Вкладка API-интерфейсы хотспотов в представлении Все распределения содержит список выделенной памяти и выделенных объектов для каждого API. Цвета, связанные с каждым API, представлены на графиках пламени.

Вы можете изменить список API, чтобы он более соответствовал вашему приложению:

  • Путем дальнейшей сегментации разбивки API. Узнайте, как добавлять пользовательские определения API.
  • Исключите сторонние библиотеки.

Выжившие

Когда вы узнаете, какие методы потребляют больше всего памяти, вы можете проверить их долговечность в представлении Выжившие. Представление показывает:

  • Объекты, пережившие одну или несколько циклов сборки мусора.
  • Время, затрачиваемое на сбор мусора.
  • Объем памяти, затраченное на все циклы сборки мусора.

Обратите внимание, что объекты, пережившие несколько циклов сборок мусора, вносят больший вклад в объем сохранившейся памяти.

В нижней части страницы вы найдете различные параметры анализа, такие как Выделение хотспоты выживших, График пламени и API горячих точек.

Выделение хотспоты выживших

На вкладке Выделение хотспоты выживших в таблице показаны методы, создавшие объекты, на которые приходится большая часть сохранившейся памяти.

Изменяя таймфрейм анализа, можно узнать время создания этих объектов.

  • Чтобы увидеть вызывающие методы, разверните метод. Вы можете увидеть, сколько памяти сохранилось после вызова методов.
  • Чтобы увидеть последовательность методов, вызываемых анализируемым методом, выберите Вызванные методы в столбце Действия.

Столбец Survived types показывает объекты, которые выделяются только в самом методе. Они не применяются к каким-либо впоследствии вызываемым методам.

Вы можете исключить сторонние API из этого представления, выбрав Дополнительно ( … ) > Правила обнаружения API в столбце Действия.

Вызываемые методы

При выборе метода на вкладке Выделение хотспоты выживших или на вкладке График пламени вы можете проанализировать трассировку стека, выбрав Вызванные методы в правом верхнем углу вкладки. На этой странице отображаются все методы в трассировке стека, включая сторонние методы.

  • На вкладке Обзор отображаются методы, вносящие наибольший вклад в сохранение памяти, а также график пламени, дающий общее представление.
  • На вкладке Детали отображается подробный и динамический график пламени для дальнейшего анализа трассировки стека.

Исключить сторонние библиотеки

Чтобы сфокусировать анализ на вашем коде, мы рекомендуем вам определить API сторонних библиотек. Для этого вам нужно пометить API, определяемый пользователем , как стороннюю библиотеку.

  1. Перейдите в Настройки > Мониторинг сервисов > Правила обнаружения API .
  2. Нажмите кнопку Детали, чтобы отредактировать требуемый API.
  3. Включите Этот API определяет стороннюю библиотеку.
  4. Сохраните изменения.
  • Вы можете использовать предварительно заполненную версию страницы правил обнаружения API из таблиц горячих точек на странице Профилирование памяти . В строке выбранного метода выберите Дополнительно ( … ) > Правила обнаружения API в столбце Действие .
  • Вы можете исключить библиотеку без ручной настройки правил из списка встроенных API . Создайте пользовательское правило для библиотеки и отметьте ее как стороннюю.