Недавно я арендовал место на WinHost.com (базовый пакет). Я развернул одно приложение ASP MVC3, использующее NHibernate. Это очень компактное приложение, я профилировал его на предмет утечек памяти, и на моем локальном IIS 6.1 у меня никогда не было проблем с ним.
Однако при развертывании на WinHost пул приложений продолжает перезагружаться. Их служба поддержки сообщает, что пакет Basic дает максимальный размер пула приложений 100M. У меня есть тот же код приложения, работающий в их пакете Max, и служба поддержки сообщила мне, что он использует 130 МБ из своего лимита в 200 МБ.
Прежде чем я сбегу и обновлю свой базовый пакет до максимального, знает ли кто-нибудь, является ли это типичным размером для легкого приложения ASP MVC. Он не использует сеанс или кеш и имеет очень тонкие страницы. Мне просто кажется странным, что вы не можете запустить ни одно приложение ASP на их базовом пакете. Они предназначены только для статических сайтов или чего-то в этом роде?
Предсказать это крайне сложно. Я видел легкие приложения MVC с одним рабочим процессом, потребляющим от 12 до 1300 МБ памяти (да, 1,3 ГБ).
Как вы, вероятно, знаете, .NET CLR построена на двухэтапной модели компиляции, а это означает, что ваши предварительно скомпилированные сборки по-прежнему нужно переводить из MSIL (реализация Microsoft Common Intermediate Language) в машинный код. При первом обращении к приложению IIS все страницы анализируются и компилируются, а результаты кэшируются в памяти процесса.
Таким образом, ваш фактический результат может быть не таким «тяжелым», но процессу все равно необходимо выделить память для скомпилированных сборок и всех зависимых сборок, загруженных из глобального кэша сборок.
Более того, это зависит не только от самого приложения. Существует большая разница в памяти, потребляемой приложением, когда у него есть очередь запросов, равная 10, по сравнению с 1000 совпадениями (даже если у каждого запроса мало места в памяти).
Для меня ограничение в 100 МБ звучит довольно сдержанно.
Одна ли разрядность и у вас, и у платформы поставщика? Я обнаружил, что при запуске приложения на x64 использование памяти увеличивается по сравнению с x86, а если объектов много, оно может удвоиться.