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

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

  1. .NET CLR Memory# Bytes во всех кучах
  2. .NET CLR MemoryGen 2 размер кучи
  3. .NET CLR Memory# GC обрабатывает
  4. .NET CLR память # закрепленных объектов
  5. .NET CLR Memory# всего зафиксированных байтов
  6. .NET CLR Memory# всего зарезервированных байтов
  7. .NET CLR Memoryбольшая куча объектов размер

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

также упоминается следующий набор:

  1. Память/Доступно Байт
  2. Память/Байт
  3. Процесс / Частные Байты
  4. Байты Файла Процесса/Страницы
  5. Процесс/Дескриптор

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

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

2 ответов


чтобы обнаружить утечку памяти с помощью монитора производительности, контролируйте эти счетчики:

  1. счетчик память/доступные байты позволяет просматривать общее количество байтов доступной памяти. Это значение обычно колеблется, но если у вас есть приложение с утечкой памяти, она будет уменьшаться с течением время.
  2. thememory/Committed bytes счетчик будет неуклонно расти, если происходит утечка памяти, потому что как количество доступных байтов память уменьшается, количество байт увеличивается.
  3. счетчик Process/Private Bytes отображает количество байтов, зарезервированных исключительно для определенного процесса. Если утечка памяти происходя, это значение будет иметь тенденцию к неуклонному росту.
  4. счетчик байтов файла процесса/страницы отображает размер файла подкачки. Windows использует виртуальную память (файл подкачки) дополнить физическая память машины. Как физическая память машины начинает заполнить страницы памяти помещаются в файл подкачки. Это нормальным файл подкачки будет использоваться даже на машинах с большим количеством памяти. Но если размер файла подкачки постоянно увеличивается, это хороший признак происходит утечка памяти.
  5. Я также хочу упомянуть счетчик количества процессов / дескрипторов. Приложения используют дескрипторы для идентификации ресурсов, которые они должны доступ. Если происходит утечка памяти, приложение будет часто создайте дополнительные дескрипторы для идентификации ресурсов памяти. Так что подъем число дескрипторов может указывать на утечку памяти. Однако, не все утечки памяти приведут к увеличению количества дескрипторов.

источник

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

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

Debugging Demos-Обзор Памяти

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

есть лучшие инструменты, доступные для облегчения тестирования утечек памяти, такие как RedGate муравьи профилировщик памяти и JetBrains dotMemory Profiler.

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

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

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

enter image description here