Как обнаружить, где Утечка памяти?

Предположение, что у Вас есть собственная сборка Windows MySQL, существует несовместимость эмуляции терминала между DOS (командная строка) окна и bash. Подсказка для mysql не обнаруживается.

Для подтверждения этого введите команду и возврат - он будет, вероятно, работать, но подсказка и эхо команды (что Вы вводите) теряются.

может быть обходное решение или в CYGWIN системные свойства или в bash, но я никогда не не торопился для разработки этого.

13
задан Chathuranga Chandrasekara 23 September 2009 в 03:29
поделиться

12 ответов

Запустите профилировщик вашего кода.

Вот два хороших варианта:

Профилировщик памяти RedGate

Jetbrains dotTrace

Я считаю, что для обоих продуктов есть бесплатная пробная версия.

9
ответ дан 1 December 2019 в 19:31
поделиться

В мониторе производительности добавьте счетчики для процесса / байтов личного пользования и памяти CLR .NET / # байтов во всех кучах. Частные байты - это вся память, а память CLR просто управляется. Таким образом, если память CLR остается достаточно ровной, но частные байты продолжают расти с течением времени, это означает, что утечка происходит в неуправляемом ресурсе. Обычно это означает, что вы неправильно распоряжаетесь собственными ресурсами. Хорошо бы посмотреть на такие вещи, как COM или IO (потоки и файлы). Когда вы закончите, убедитесь, что все это утилизировано.

3
ответ дан 1 December 2019 в 19:31
поделиться

Вы можете попробовать использовать профилировщики, такие как dotTrace - установите его в трассировку памяти и запустите приложение.

Это должно помочь вам понять, какие сборки и области приложения потребляют слишком много памяти на ходу.

1
ответ дан 1 December 2019 в 19:31
поделиться

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

MSDN имеет хорошее руководство по этому вопросу.

Если у вас есть какие-либо классы в вашем приложении, которые, как вы знаете, используют большие ресурсы, это первые места для поиска проблемы с памятью.

1
ответ дан 1 December 2019 в 19:31
поделиться

Я обнаружил, что EQATEC Profiler довольно хорош, к тому же он бесплатный!

1
ответ дан 1 December 2019 в 19:31
поделиться

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

Другой - это глобальные объекты, такие как статические объекты.

0
ответ дан 1 December 2019 в 19:31
поделиться

На вашем сайте много динамических страниц?

Вы также можете попробовать IBM Purify

. Я предлагаю вам попробовать с небольшим набором динамических страниц, отключив на время все остальные. Ненавижу это говорить, но вполне возможно, что в IIS 7 также могут быть утечки.

0
ответ дан 1 December 2019 в 19:31
поделиться

Утечки памяти в .NET не так распространены, но когда они случаются, чаще всего из-за неподключенных обработчиков событий. Убедитесь, что вы отсоединили обработчики, прежде чем слушатели выйдут из области видимости.

Другой вариант - если вы забыли вызвать Dispose () на IDisposable ресурсах. Это может помешать очистке неуправляемых ресурсов (которые не обрабатываются сборщиком мусора).

И еще одна возможная причина - заблокированный финализатор. Это предотвратит сбор всех оставшихся объектов в очереди финализатора.

Я использую WinDbg + Sos для отслеживания утечек. Шаги следующие:

  • Сбросьте кучу и найдите подозреваемых
  • Используйте ! gcroot , чтобы узнать, что поддерживает жизнь подозреваемых.
  • Повторите, если необходимо

Имейте в виду, что большое использование памяти также может быть связано с фрагментацией кучи. Обычные кучи уплотняются, но закрепленные объекты могут вызвать фрагментацию. Кроме того, LOH не сжимается, поэтому фрагментация не является редкостью для LOH.

Отличные руководства по WinDbg + sos здесь: http://blogs.msdn.com/tess/

14
ответ дан 1 December 2019 в 19:31
поделиться

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

Демонстрации отладки .NET

Они могут помочь. По сути, вы можете использовать WinDBG для анализа дампа памяти и определения того, что занимает всю вашу память.

Мы использовали аналогичный подход, чтобы определить, что Regex поглощает всю нашу память, но только когда продукт был запущен на 64-битных машинах. Кривая обучения довольно крутая, но WinDBG - очень мощный инструмент.

1
ответ дан 1 December 2019 в 19:31
поделиться

Беги, не ходи, к Тесс Блог Феррандеса, Если он сломан, значит, исправить это следует , который хорошо скриптовые лаборатории, посвященные обучению как диагностировать и отлаживать вылеты, зависания и проблемы с памятью с кодом .NET. она есть одни из лучших материалов, которые я найдены на сегодняшний день, чтобы помочь вам начать работу.

Коммерческие профилировщики памяти, такие как ANTS и SciTech , являются отличными ресурсами, которые покажут, какие объекты находятся в куче и как они внедряются . Большинство коммерческих профилировщиков памяти имеют возможность загружать «снимок» памяти процесса (скажем, из вашей производственной среды).

Вы можете записать «снимок» памяти (см. Snap v. Dump ), используя adplus.vbs или DebugDiag . Adplus доступен как часть инструментов отладки для Windows . DebugDiag также будет иметь некоторый элементарный анализ (но кажется более надежным для неуправляемого кода) автоматически.

Мониторинг приложения
Для получения информации о том, что отслеживать, см. Повышение производительности и масштабируемости .NET , а именно Глава 15.

Что касается мониторинга, для этого также доступны коммерческие инструменты, однако каждая машина с Windows также поставляется с Perfmon.exe, который можно использовать для записи соответствующих счетчиков производительности.

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

Отладка приложения
После того, как вы определили, что вы есть проблема (мониторинг) и вы можете воспроизвести проблему (тестирование), вы можете приступить к отладке проблемы. См. Ссылки для Тесс - эта информация поможет вам.

Затем промойте и повторите! :)

Удачи!
которые можно использовать для записи соответствующих счетчиков производительности.

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

Отладка приложения
Как только вы определили, что у вас есть проблема (мониторинг) и вы можете воспроизвести проблему (тестирование), вы можете приступить к отладке проблемы. См. Ссылки для Тесс - эта информация поможет вам.

Затем промойте и повторите! :)

Удачи!
которые можно использовать для записи соответствующих счетчиков производительности.

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

Отладка приложения
Как только вы определили, что у вас есть проблема (мониторинг) и вы можете воспроизвести проблему (тестирование), вы можете приступить к отладке проблемы. См. Ссылки для Тесс - эта информация поможет вам.

Затем промойте и повторите! :)

Удачи!
Если вы определили, что у вас есть проблема (мониторинг), и вы можете воспроизвести проблему (тестирование), вы можете приступить к ее отладке. См. Ссылки для Тесс - эта информация поможет вам.

Затем промойте и повторите! :)

Удачи!
Если вы определили, что у вас есть проблема (мониторинг), и вы можете воспроизвести проблему (тестирование), вы можете приступить к ее отладке. См. Ссылки для Тесс - эта информация поможет вам.

Затем промойте и повторите! :)

Удачи!
Z

4
ответ дан 1 December 2019 в 19:31
поделиться

Посмотрите эту статью об обнаружении утечек памяти приложений .NET и связанные статьи, упомянутые внизу страницы, и, надеюсь, вы найдете решение или, по крайней мере, идею для разрешите это.

Спасибо

0
ответ дан 1 December 2019 в 19:31
поделиться
1
ответ дан 1 December 2019 в 19:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: