Подтвердить что ты не робот

Счетчики Perfmon для проверки утечки памяти

Я хочу проверить проблему утечки памяти в моей службе. Я пробовал следующий набор счетчиков perfmon.

  • Память .NET CLR\# Bytes во всех кучах
  • Размер памяти .NET CLR Memory\Gen 2
  • Память .NET CLR Memory\# GC
  • Память .NET CLR\# закрепленных объектов
  • .NET CLR Memory\# total commit Bytes
  • Память .NET CLR\# общая зарезервированная байты
  • Память .NET CLR\Большой размер кучи объекта

Я упомянул выше, из здесь

Также указан следующий набор:

  • Память/Доступные байты
  • Память/Фиксированные байты
  • Процесс/частные байты
  • Байты файлов процесса/файлов
  • Обработка/количество обработок

Я упомянул выше, из здесь

Есть ли какой-либо параметр/критерий или какой-либо другой лучший способ идентифицировать счетчик перфтомов для утечки памяти?
Может ли кто-нибудь предложить мне набор счетчиков для проверки утечки памяти? Или над множествами покрывает утечку памяти?

4b9b3361

Ответ 1

Чтобы обнаружить утечку памяти с помощью Performance Monitor, выполните мониторинг этих счетчиков:

  • Счетчик памяти/доступного байта позволяет просмотреть общее количество байтов доступной памяти. Это значение обычно колеблется, но если у вас есть приложение с утечкой памяти, оно будет уменьшаться время.
  • Счетчик TheMemory/Committed Bytes неуклонно растет, если происходит утечка памяти, поскольку количество доступных байтов память уменьшается, количество зафиксированных байтов увеличивается.
  • Счетчик Process/Private Bytes отображает количество байтов, зарезервированных исключительно для определенного процесса. Если утечка памяти это значение будет стремительно расти.
  • Счетчик байтов процесса/файла страницы отображает размер файла подкачки. Windows использует виртуальную память (файл подкачки) для дополнения физическая память устройства. Как физическая память машины начинает заполнение, страницы памяти перемещаются в файл подкачки. Это нормально для файл подкачки, который будет использоваться даже на машинах с большим количеством памяти. Но если размер файла подкачки постоянно увеличивается, то хороший знак утечка памяти.
  • Я также хочу упомянуть счетчик счетчиков Process/Handle Count. Приложения используют дескрипторы для определения ресурсов, которые они должны доступ. Если происходит утечка памяти, приложение часто будет создайте дополнительные ручки для идентификации ресурсов памяти. Таким образом, рост количество обработчиков может указывать на утечку памяти. Тем не менее, не все утечки памяти приведут к увеличению количества обработчиков.

Источник

По моему опыту это точно.

Я также отсылаю вас к этому блогу Microsoft Advanced Debugging от Тесса, сотрудника Microsoft. Кто предлагает следующие счетчики. Я нашел выше, чтобы быть более чем достаточно, чтобы указать на утечку памяти, но я верю, что инструкции Tess могут обеспечить более глубокое понимание проблемы.

Отладка демонстраций - обзор памяти

  • Память .NET CLR/# Bytes во всех кучах
  • Память .NET CLR/Большой размер кучи объектов
  • Размер кучи памяти .NET CLR/Gen 2
  • Размер кластера .NET CLR Memory/Gen 1
  • Размер кластера .NET CLR Memory/Gen 0
  • Процесс/частные байты
  • Процесс/виртуальные байты

Ответ 2

Есть более доступные инструменты для облегчения тестирования утечек памяти, таких как RedGate ANTS Memory Profiler и JetBrains dotMemory Profiler.

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

Имейте в виду, что Garbage Collection не освобождает память сразу после того, как какой-то экземпляр утилизируется. Он оптимизирован для запуска и освобождения памяти только при наличии напряжения памяти. Итак, если вы хотите протестировать утечки памяти, вы должны выполнить сборку мусора вручную, прежде чем принимать показания счетчика.

GC.Collect();
GC.WaitForPendingFinalizers();

введите описание изображения здесь