Какой максимальный объем памяти может использовать веб-сайт / пул IIS6?

8

У меня есть сервер IIS 6, работающий на Windows 2003 SP2 x86. Сервер имеет 4 ГБ оперативной памяти и работает с выделенными 2 ГБ.

Я понимаю, что с x86 сервер не будет использовать всю 4 ГБ ОЗУ, и пространство приложений также ограничено, но процессы IIS, по-видимому, ограничены в других местах. У w3wp.exe никогда не выделяется более 500 МБ, и я иногда получаю исключения OutOfMemory из загруженного приложения .NET (работает несколько приложений, каждое с отдельным пулом приложений).

Какой максимальный объем памяти может использовать веб-сайт / пул IIS6?

Робин М
источник

Ответы:

7

Приложения под Windows x86 ограничены 2 ГБ / шт. Вы можете изменить это, добавив флаг / 3gb в boot.ini, но это может вызвать непредвиденное поведение приложения и должно использоваться с осторожностью. MS официально не поддерживает это ( http://technet.microsoft.com/en-us/library/bb124810.aspx )

Ограничения памяти IIS можно установить на вкладке «Переработка» в соответствующем пуле приложений.

Как вы определяете, что приложение никогда не превышает 500 МБ? Если вы используете диспетчер задач, имейте в виду, что это редко (если вообще) точное представление об использовании памяти, как понимает Windows. Используйте Process Explorer: http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx

Есть ряд других актуальных вопросов:

  • Есть ли ошибки в журналах событий?
  • Это особая строка кода, генерирующая исключения? Если да, действительно ли это исключение OutOfMemory является проблемой IIS или проблемой кода?
  • Вы вообще ограничиваете свои пулы приложений настройкой Recyling?
  • Есть ли другие службы, работающие на этой машине?

Скорее всего, IIS, ASP.NET и весь связанный с ними багаж работают с лимитом в 2 ГБ, хотя диспетчер задач Windows этого не показывает. Установка ограничений на утилизацию или обновление до x64, вероятно, будет иметь огромное значение.

ш-бета
источник
3

иногда получать исключения OutOfMemory из загруженного приложения .NET

Ответ на это слишком сложен, чтобы уместиться в ответе. См. « Настройка производительности приложений .NET » для полной обработки предмета.

Вот очень упрощенное (но все еще довольно хорошее) резюме Бруно Жухье :

Кроме того, среда выполнения .NET не позволяет использовать до 2 ГБ. Сборщик мусора работает путем копирования живых объектов, поэтому для его копирования требуется достаточно места.

Редактировать:

Вот моя попытка объяснения ...

Если вам интересно, каков максимальный размер памяти рабочего процесса (согласно отчету диспетчера задач) для рабочего процесса ASP.NET на x86, ответ «это зависит» .

В любом управляемом коде, таком как Java или .NET, программист отказывается от детального управления памятью в качестве наказания за то, что ему не приходится иметь дело с указателями. По мере выполнения программы сборщик мусора будет периодически очищать кучу и стек .

В частности, в отношении ASP.NET сборщик мусора работает внутри того же рабочего процесса, что и веб-сайт. GC потребляет собственную память. Как много памяти полностью зависит от того, как написан код вашего приложения. Одно приложение может использовать 1,8 ГБ памяти, а другое - 500 МБ. Чтобы понять почему , вам нужно профилировать ваше конкретное приложение.

Портман
источник
Я согласен, что отладка исключений OutOfMemory является сложной - спасибо за ссылку. Тем не менее, я спрашиваю, как ограничена память, и это должно быть возможно ответить на это.
Робин М
2

Любой процесс в ОС x86 Windows ограничен 2 ГБ, если вы не установили параметр / 3gb в файле boot.ini, и в этом случае процесс может использовать 3 ГБ.

Стив Эванс
источник
Да, но я не близко к 2 ГБ для процесса?
Робин М
2

Из этого поста «Рекомендации по настройке пула приложений SharePoint» :

Сосредоточив внимание на физическом, я обычно хотел бы ограничить пулы приложений от 800 МБ до 1200 МБ максимум для 32-разрядных приложений с очень небольшим количеством пулов приложений в зависимости от количества и объема памяти. На сервере с 2 ГБ ОЗУ я бы установил его на уровне около 800 МБ. На 4 ГБ ОЗУ сервера около 1 ГБ и более, если больше, с максимальным значением около 1200. На 64-битном веб-интерфейсе с 8-16 ГБ памяти я слышал о настройках 2 ГБ ОЗУ или даже о том, что он позволяет ему работать, а не ограничивая это.

Вы действительно должны профилировать это, так как они действительно могут расти для обработки и кэширования. Чем больше объем памяти и чем больше нагрузка, тем выше будет рабочий процесс. Когда люди спрашивают о настройке пула приложений, они обычно спрашивают, какими должны быть цифры. То, что вы делаете здесь, явно ограничивает пул приложений от потребления большего количества памяти. Обратите внимание, что этот параметр находится на вкладке корзины, есть причина для этого.

Когда пул приложений достигает максимума, это не похоже на настройку максимального процессора. Он будет циклически повторять рабочий процесс, который похож на крошечную перезагрузку или похож на iisreset, но не потому, что иногда мы хотим, чтобы это произошло, чтобы освободить память. Вы действительно не хотите ездить на велосипеде больше, чем пару раз за 24 часа в идеальном мире. Я слышал о некоторых попытках циклического цикла непосредственно перед тем, как наступит утренний пик, чтобы у них было наибольшее количество доступной памяти, затем цикл в конце дня перед началом резервного копирования или сканирования.

Из моего опыта 800 МБ - порог для 32-битных машин (2-4 ГБ ОЗУ). Он перезагружает пулы приложений, прежде чем выбрасывать исключения «нехватки памяти».

splattne
источник
2

Убедитесь, что вы не устанавливаете размер виртуальной памяти в вашем пуле приложений. Если вы установите это значение в число вне допустимого диапазона, оно вернется к 512 МБ. См. KB923197 .

Также обратите внимание, что если вы работаете с приложением ASP.Net, ASP.Net перезапустит пул с 60% предела памяти 2 ГБ или 1,2 ГБ. Это не ваш сценарий ~ 500, но в 32-разрядных apppools с большим использованием памяти, мы иногда настраиваем это, чтобы получить немного больше памяти.

<system.web> 
  <processModel memoryLimit="80" />
</system.web> 
Christopher_G_Lewis
источник
1

В Windows 2003 вы можете установить расширение физического распределения (PAE), чтобы использовать всю память. Объем памяти по умолчанию для пула приложений IIS6 составляет 5 МБ .

Сообщество
источник
Хорошо, но это не объясняет, почему процесс ограничен до 500 МБ. Память по умолчанию для пула приложений интересна, но не очень актуальна или полезна, извините!
Робин М
Вы случайно запускаете SQL на том же компьютере?
Нет. SQL не в той же коробке. Он ограничен web / ftp / smtp с использованием IIS.
Робин М