Posted on 17. January 2020

Получение и анализ дампов памяти

Опираясь на улучшения диагностики, представленные в .NET Core 3.1, мы представили новый инструмент для сбора дампов кучи из запущенного процесса .NET Core.

В предыдущем посте мы представили dotnet-dump, инструмент, позволяющий вам собирать и анализировать дампы процессов. С тех пор мы усердно работали над улучшением работы с дампами.

Два ключевых улучшения, которые мы внесли в dotnet-dump:

Нам больше не требуется sudo  для сбора дампов в Linux

dotnet dump analyze теперь поддерживается в Windows

GC дампы

Однако одно из ключевых ограничений, которое остается, - это то, что дампы процессов не переносимы. Невозможно диагностировать дампы, собранные в Linux с помощью Windows и наоборот.

Многие распространенные сценарии не требуют полной проверки дампа процесса. Чтобы включить эти сценарии, мы представили новый облегченный механизм сбора дампа, который является переносимым. Запустив сборку мусора в целевом процессе, мы можем осуществлять потоковую передачу событий, генерируемых сборщиком мусора, через механизм Existing EventPipe для восстановления графика корней объектов из этих событий.

Эти дампы GC полезны для нескольких сценариев, включая:

Сравнение количества объектов по типу в куче

Анализ корней объекта

Нахождение каких объектов имеет ссылку на какой тип

Другой статистический анализ об объектах в куче

dotnet-gcdump

 

В .NET Core 3.1 мы представляем новый инструмент, который позволяет вам захватывать вышеупомянутые дампы процессов для анализа в PerfView и Visual Studio.

Вы можете установить этот глобальный инструмент .NET, выполнив следующую команду:

dotnet tool install --global dotnet-gcdump

 

Установив dotnet gcdump, вы можете перехватить дамп GC, выполнив следующую команду:

dotnet gcdump collect -p <target-process-PID>

 

Примечание: Сбор gcdump запускает полную сборку мусора Gen 2 в целевом процессе и может изменить характеристики производительности вашего приложения. Продолжительность паузы GC, испытываемая приложением, пропорциональна размеру кучи GC; приложения с большими кучами будут испытывать более длительные паузы.

Полученный файл.gcdump можно проанализировать в Visual Studio и PerfView в Windows.

Анализ дампов GC в Visual Studio

Собранные дампы GC можно проанализировать, открыв файлы .gcdumpв Visual Studio. После открытия в Visual Studio вы попадаете на страницу отчета об анализе памяти.

В верхней панели отображается количество и размер типов в снимке, включая размер всех объектов, на которые ссылается тип (Inclusive Size).

В нижней панели дерево Paths to Root отображает объекты, которые ссылаются на тип, выбранный в верхней панели. В дереве ссылочных типов отображаются ссылки, содержащиеся в типе, выбранном в верхней панели.

В дополнение к отчету об анализе памяти только одного дампа GC, Visual Studio также позволяет сравнивать два дампа GC. Чтобы просмотреть подробную информацию о разнице между текущим снимком и предыдущим снимком, перейдите в раздел отчета Compare To и выберите другой дамп GC, который будет использоваться в качестве базовой линии.

Заключение

Спасибо за опробование новых инструментов диагностики в .NET Core 3.1. Пожалуйста, продолжайте оставлять свои отзывы, либо в комментариях, либо на GitHub Мы внимательно прислушиваемся к вашим отзывам и будем вносить изменения.

 

Источник