Рабочий процесс IIS с использованием большого количества памяти?

У меня есть один веб-сайт на моем сервере, и мой рабочий процесс IIS использует оперативную память 4 ГБ. Что я должен проверять?

c:\windows\system32\inetsrv\w3wp.exe

Ответы

Ответ 1

Я бы проверил раздел настройки CLR в документе , о котором говорил Гульзар.

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

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

  • Процесс\Частные байты
  • .NET CLR Memory # Байт во всех кучах
  • Процесс\Рабочий набор
  • Память .NET CLR\Большой размер кучи объекта

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

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

Ответ 3

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

using является конструкцией С#, но основная идея заключается в том, что вы освобождаете ресурсы, когда закончите.

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

Ответ 4

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

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

Ответ 5

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

Ответ 6

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