Рабочий процесс IIS, использующий много памяти? - PullRequest
15 голосов
/ 29 октября 2008

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

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

Ответы [ 6 ]

12 голосов
/ 29 октября 2008

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

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

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

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

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

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

5 голосов
/ 29 октября 2008

проверьте раздел по устранению узких мест в памяти в Настройка производительности приложений .NET

1 голос
/ 29 октября 2008

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

1 голос
/ 29 октября 2008

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

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

1 голос
/ 29 октября 2008

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

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

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

0 голосов
/ 29 октября 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...