У меня есть один веб-сайт на моем сервере, и мой рабочий процесс IIS использует оперативную память 4 ГБ. Что я должен проверять?Рабочий процесс IIS с использованием большого количества памяти?
c:\windows\system32\inetsrv\w3wp.exe
У меня есть один веб-сайт на моем сервере, и мой рабочий процесс IIS использует оперативную память 4 ГБ. Что я должен проверять?Рабочий процесс IIS с использованием большого количества памяти?
c:\windows\system32\inetsrv\w3wp.exe
Я бы уточнил раздел настройки CLR в document Гульзар.
Как указывалось на других плакатах, любой объект, который реализует IDispose
, должен иметь Dispose()
, который был вызван, когда он закончен, предпочтительно используя конструкцию using
.
вспылить perfmon.exe
и добавить эти счетчики:
- Process \ Private Bytes
- .NET CLR памяти # Bytes во всех Кучи
- процесса \ Working Set
- .NET CLR памяти \ Большой размер кучи объекта
Увеличение количества частных байтов в то время как количество байтов во всех счетчиках Heaps остается неизменным. потребление памяти.
Увеличение оба счетчика указывает на управляемой памяти потребление
проверить раздел на узких памяти и устранение неисправностей в Tuning .NET Application Performance
Если у вас есть доступ к исходному коду, вы можете проверить, что все объекты, которые реализуют IDisposable в настоящее время ссылки внутри using
заявления или должным образом утилизировать когда вы закончите с ними.
Using
- это конструкция C#, но основная идея заключается в том, что вы освобождаете ресурсы, когда закончите.
Еще одна вещь, которую нужно проверить - это большие объекты, которые попадают в состояние сеанса «в процессе» или кеш.
Более подробная информация определенно поможет. Сколько приложений запущено внутри пула приложений? Существуют ли приложения ASP.NET в пуле?
Если вы используете ASP.NET, взгляните на то, что вы храните в переменных сеанса и кэша. Используйте PerfMon для проверки количества коллекций Generation 0, 1 и 2. Будьте осторожны при хранении элементов пользовательского интерфейса в состоянии сеанса или кеше, поскольку это предотвратит сбор всего экземпляра страницы и всех дочерних элементов экземпляра страницы. Наконец, проверьте, выполняете ли вы много конкатенации строк. Это может вызвать множество экземпляров объектов, поскольку строки .NET неизменяемы. Посмотрите на использование StringBuilder.
Создайте мини-дамп процесса w3wp и используйте WinDbg, чтобы узнать, какие объекты находятся в памяти. Это то, что команда поддержки IIS в Microsoft делает, когда у них возникают такие вопросы.
Да, но если строки находятся на большой куче объекта, они будут собраны только во время коллекций Gen 2, если я не ошибаюсь. – Maxam 2008-10-29 05:55:37