Анализируя дамп памяти, чтобы найти утечку

У нас есть приложение aC# .NET, в котором есть утечка памяти. Я использовал procdump для получения дампа памяти из запущенного экземпляра приложения с рабочей машины. Производственный компьютер работает под управлением 32-разрядной Windows XP и.NET 4.0.

Конфигурация exe установлена ​​на.net 4.0

<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0" />

Когда я перетаскиваю дамп в свой ящик dev, windows 8.1 64bit, и открываю его с VS 2013, дамп изначально открывается нормально. Однако, когда я нажимаю на действие " Отладить управляемую память", я получаю следующее сообщение об ошибке:

Анализ памяти не поддерживается для версии CLR, используемой в этом процессе.

Я новичок в устранении утечек памяти в Windows и в средах с управляемой памятью и почти ничего не знаю об используемых инструментах. Я сделал поиск в Google по полученной ошибке и ничего не нашел. Любая помощь приветствуется. Прошу прощения, если мне не хватает чего-то очевидного - Junior Dev здесь:-)

3 ответа

Я не знаю, можно ли использовать procdump для обнаружения утечки памяти в.NET. Один из эффективных способов, которые я попробовал, - это использование Windbg и SOS. В двух статьях объясняется, как использовать Windbg+ SOS для отслеживания утечек памяти.NET:

  1. Где твоя утечка в? [Использование WinDbg, SOS и GCRoot для диагностики утечки памяти.NET]
  2. Отладка утечки памяти управляемого кода с помощью дампа памяти с помощью windbg

Если вам не нравится Windbg, инструмент DebugDiag также является очень эффективным инструментом для отслеживания утечек памяти.

Посмотрите эту ссылку, она работает только в процессе, работающем под.Net 4.5

Прежде чем я начну, необходимо отметить несколько моментов, связанных с функцией "Отладка управляемой памяти", которая обсуждается в этом посте:

  1. Этот параметр будет доступен только на странице сводной информации о дампе в окончательной версии Visual Studio 2013. Если вы используете Premium или Professional, вы не увидите этот параметр.
  2. Процесс, для которого был собран файл дампа, должен быть запущен в.NET 4.5 или выше. Если дамп был собран на 3.5 или более ранней версии, опция не появится, если она была собрана на 4.0, она не запустится с сообщением об ошибке.

Начиная с Windows 7 /Server 2008 R2, существует способ создать клон процесса и создать дамп этого клона, чтобы процесс, который вам нужен, не нужно было приостанавливать. Используйте procdump -r, чтобы использовать эту функцию при захвате дампа.

Вы также можете использовать захват трассировки ETW и анализировать данные с помощью PerfView.

https://superuser.com/questions/846079/how-can-i-create-a-memory-dump-of-a-production-system-without-affecting-performa/846156

Другие вопросы по тегам