Лучшие методы в .NET: выявление утечек памяти приложения - Использование счетчиков производительности индивидуальных (закрытых) байтов для выявления утечек памяти

ОГЛАВЛЕНИЕ

Использование счетчиков производительности индивидуальных (закрытых) байтов для выявления утечек памяти

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

Ниже перечислены шаги, которым нужно следовать, чтобы отслеживать индивидуальные байты в приложении при помощи счетчиков производительности:-

  • Запустите приложение, имеющее утечку памяти, и поддерживайте его в рабочем состоянии.
  • Щелкните мышкой по запуску Goto (идти к) и наберите на клавиатуре ‘perfmon’.
  • Удалите все имеющиеся счетчики производительности, выбирая счетчик и удаляя его путем нажатия на кнопку удаления.
  • Нажмите правую кнопку мыши, выберите ‘Add counters (добавить счетчики)’ , выберите ‘process (процесс)’ из объекта производительности.
  • Из списка счетчиков выберите ‘Private bytes (индивидуальные байты)’.
  • Из списка копий выберите приложение, которое вы хотите проверить на утечку памяти.

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

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

3-х шаговый процесс изучения утечки памяти

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

  • Какой? -  Сначала нужно попытаться выяснить, каков тип утечки памяти – это управляемая утечка памяти или неуправляемая утечка памяти.
  • Как?  -  Что в действительности вызывает утечку памяти? Это объект соединения, файл какого-то типа, дескриптор которого не закрыт, и т.д.?
  • Где? -  Которая функция / процедура или логика вызывает утечку памяти?