Рабочий процесс IIS с использованием большого количества памяти?
У меня есть один веб-сайт на моем сервере, и мой рабочий процесс IIS использует оперативную память 4 ГБ. Что я должен проверять?
c:\windows\system32\inetsrv\w3wp.exe
Ответы
Ответ 1
Я бы проверил раздел настройки CLR в документе , о котором говорил Гульзар.
Как указывали другие плакаты, любой объект, который реализует IDispose
, должен иметь Dispose()
, когда он заканчивается, предпочтительно используя конструкцию using
.
Запустите perfmon.exe
и добавьте эти счетчики:
- Процесс\Частные байты
- .NET CLR Memory # Байт во всех кучах
- Процесс\Рабочий набор
- Память .NET CLR\Большой размер кучи объекта
Увеличение количества личных байтов в количество байтов во всех счетчиках Heaps остается неизменным, указывает на неуправляемые потребление памяти.
Увеличение оба счетчика указывают управляемую память Потребление
Ответ 2
проверьте раздел "Устранение проблем с памятью" в Настройка производительности приложений .NET
Ответ 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