2008-10-29 1 views

ответ

13

Я бы уточнил раздел настройки CLR в document Гульзар.

Как указывалось на других плакатах, любой объект, который реализует IDispose, должен иметь Dispose(), который был вызван, когда он закончен, предпочтительно используя конструкцию using.

вспылить perfmon.exe и добавить эти счетчики:

  • Process \ Private Bytes
  • .NET CLR памяти # Bytes во всех Кучи
  • процесса \ Working Set
  • .NET CLR памяти \ Большой размер кучи объекта

Увеличение количества частных байтов в то время как количество байтов во всех счетчиках Heaps остается неизменным. потребление памяти.

Увеличение оба счетчика указывает на управляемой памяти потребление

1

Если у вас есть доступ к исходному коду, вы можете проверить, что все объекты, которые реализуют IDisposable в настоящее время ссылки внутри using заявления или должным образом утилизировать когда вы закончите с ними.

Using - это конструкция C#, но основная идея заключается в том, что вы освобождаете ресурсы, когда закончите.

Еще одна вещь, которую нужно проверить - это большие объекты, которые попадают в состояние сеанса «в процессе» или кеш.

1

Более подробная информация определенно поможет. Сколько приложений запущено внутри пула приложений? Существуют ли приложения ASP.NET в пуле?

Если вы используете ASP.NET, взгляните на то, что вы храните в переменных сеанса и кэша. Используйте PerfMon для проверки количества коллекций Generation 0, 1 и 2. Будьте осторожны при хранении элементов пользовательского интерфейса в состоянии сеанса или кеше, поскольку это предотвратит сбор всего экземпляра страницы и всех дочерних элементов экземпляра страницы. Наконец, проверьте, выполняете ли вы много конкатенации строк. Это может вызвать множество экземпляров объектов, поскольку строки .NET неизменяемы. Посмотрите на использование StringBuilder.

+0

Да, но если строки находятся на большой куче объекта, они будут собраны только во время коллекций Gen 2, если я не ошибаюсь. – Maxam 2008-10-29 05:55:37

0

Как и другие люди отметили распространенной причиной этой проблемы является утечка ресурсов, также существует известная проблема с Win2k3 сервером и IIS6 KB916984

+0

Я бы подумал, что это была проблема ... но у меня уже есть SP2. :( – Jason 2008-10-29 05:49:01

1

Создайте мини-дамп процесса w3wp и используйте WinDbg, чтобы узнать, какие объекты находятся в памяти. Это то, что команда поддержки IIS в Microsoft делает, когда у них возникают такие вопросы.