У меня есть сервер IIS 6 под управлением Windows 2003 SP2 x86. Сервер имеет 4 ГБ ОЗУ и работает стабильно с выделенными 2 ГБ.
Я понимаю, что с x86 сервер не будет использовать все 4 ГБ ОЗУ, и пространство приложений также ограничено, но процессы IIS, похоже, ограничены в другом месте. У w3wp.exe никогда не выделяется более 500 МБ, и я иногда получаю исключения OutOfMemory из загруженного приложения .NET (работает несколько приложений, каждое с отдельным пулом приложений).
Каков максимальный объем памяти, который может использовать пул веб-сайта / приложений IIS6?
Приложения под 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
Есть еще ряд актуальных вопросов:
Скорее всего, IIS, ASP.NET и весь связанный с ними багаж работают с ограничением в 2 ГБ, хотя диспетчер задач Windows этого не показывает. Установка пределов повторного использования или обновление до x64, вероятно, будет иметь огромное значение.
иногда получать исключения OutOfMemory из загруженного приложения .NET
Ответ на этот вопрос слишком сложен, чтобы уместиться в нем. Видеть "Настройка производительности приложений .NET" для полного изложения предмета.
Вот сильно упрощенное (но все же неплохое) резюме из Бруно Жуье:
Кроме того, среда выполнения .NET не позволяет увеличить размер до 2 ГБ. Сборщик мусора копирует живые объекты, поэтому для выполнения копий ему требуется достаточно места.
Вот моя попытка объяснения ...
Если вам интересно, каков максимальный размер памяти рабочего процесса (по данным диспетчера задач) для рабочего процесса ASP.NET на x86, ответ будет "это зависит".
В любом управляемом коде, таком как Java или .NET, программист отказывается от детального управления памятью в качестве наказания за то, что ему не нужно иметь дело с указателями. По мере выполнения программы куча и стек будут периодически очищаться Уборщик мусора.
В частности, что касается ASP.NET, сборщик мусора работает внутри того же рабочего процесса, что и веб-сайт. Сборщик мусора потребляет собственную память. Как много Память полностью зависит от того, как написан код вашего приложения. Одно приложение может использовать 1,8 ГБ памяти, а другое - 500 МБ. Чтобы понять Зачем, вам необходимо профилировать ваше конкретное приложение.
Убедитесь, что вы не устанавливаете размер виртуальной памяти в пуле приложений. Если вы установите это значение на число вне допустимого диапазона, оно вернется к 512 МБ. Видеть KB923197.
Также обратите внимание, что если вы запускаете приложение ASP.Net, ASP.Net перезапустит пул на 60% от лимита памяти 2 ГБ или 1,2 ГБ. Это не ваш сценарий ~ 500, но в 32-битных пулах приложений с большим использованием памяти мы иногда настраиваем его, чтобы получить немного больше памяти.
<system.web>
<processModel memoryLimit="80" />
</system.web>
Из этого сообщения в блоге «Рекомендации по настройкам пула приложений SharePoint»:
Сосредоточившись на физическом, я обычно предпочитаю ограничивать пулы приложений от 800 МБ до 1200 МБ максимум для 32-разрядного приложения с очень небольшим количеством пулов приложений в зависимости от количества и объема памяти. На сервере с 2 ГБ ОЗУ я бы установил максимум 800 МБ. На сервере с 4 ГБ ОЗУ около 1 ГБ или больше, если максимум около 1200. В 64-битном веб-интерфейсе с 8–16 ГБ памяти я слышал о настройках 2 ГБ ОЗУ или даже о том, что он позволяет ему работать, а не ограничивать его.
Вам действительно нужно профилировать его, поскольку они действительно могут расти для обработки и кеширования. Чем больше объем памяти и чем больше нагрузка, тем выше будет расти рабочий процесс. Когда люди спрашивают о настройке пула приложений, они обычно спрашивают, какие числа должны быть. То, что вы здесь делаете, явно ограничивает использование пулом приложений большего объема памяти. Обратите внимание, что этот параметр находится на вкладке «Утилизация», для этого есть причина.
Когда пул приложений достигает максимума, это не похоже на настройку максимального процессора. Он запустит цикл рабочего процесса, который похож на небольшую перезагрузку или похож на iisreset, но не потому, что иногда мы хотим, чтобы это произошло, чтобы мы могли освободить нашу память. В идеальном мире вы действительно не хотите совершать цикл больше пары раз за 24 часа. Я слышал о некоторых попытках выполнить цикл прямо перед наступлением утреннего пика, чтобы у них было больше всего доступной памяти, а затем цикл в конце дня перед началом резервного копирования или сканирования.
Из моего опыта 800 МБ это порог для 32-битных машин (2-4 ГБ ОЗУ). Он перерабатывает пулы приложений перед тем, как выбросить исключения «нехватки памяти».
Любой процесс в ОС Windows x86 ограничен 2 ГБ, если вы не установили переключатель / 3gb в файле boot.ini, и в этом случае процесс может использовать 3 ГБ.
В Windows 2003 вы можете установить Расширение физического распределения (PAE), чтобы использовать всю память. Память по умолчанию для пула приложений IIS6: 5 МБ.