Устраивают ли сайты в одном пуле приложений общие загружаемые библиотеки?

У меня есть Windows Server 2012 с IIS 8.0. В нем размещается множество небольших сайтов с низкой базой пользователей, которые не являются критическими в любом случае. С небольшим веб-сайтом я имею в виду, что код приложения и объем памяти довольно низкий, но из-за загруженных библиотек, таких как EntityFramework, потребление памяти приложениями составляет около 140 МБ при запуске и простоте.

В общем, это не большая проблема для полномасштабного веб-сервера, но у меня есть только VPS с 4 ГБ ОЗУ, в котором также работает несколько других приложений (базы данных, BIND, hMail и т.д.). Я использую его в основном как сервер разработки, чтобы играть со многими различными технологиями. Следовательно, Im быстро исчерпывает оперативную память, обслуживая десятки ~ 140 МБ w3wps.

Помимо приостановки, когда Idle Id хочет уменьшить потребление памяти, все еще используя любую фреймворк или библиотеку Id, которая нравится использовать, - на самом деле это цель всего.

Короче говоря:. Поскольку приложения не только используют одну и ту же версию .NET, но также некоторые библиотеки, такие как EF или MVC, было бы разумнее запускать несколько сайтов в одном app_pool, чтобы они могли делиться библиотеками? Или каждый сайт будет загружать свою собственную копию в любом случае (из-за разных доменов приложений, например обсуждаемых здесь)?

Бонусный вопрос: при рассмотрении аппаратного обновления 1 ГБ ОЗУ составляет 20 $/месяц, но весь сервер на SSD составляет 10 $/месяц. Хотя я знаю, что чтение из файла страницы всегда намного медленнее, чем чтение из ОЗУ. Я думаю об использовании большого файла подкачки на SSD вместо того, чтобы покупать 1gig дополнительной RAM в два раза больше цены - опять же, скорость веб-сайтов не является критичной, они должны просто работай. Будет ли это иметь какой-то смысл?

Ответ 1

Взгляд на процесс w3wp (размещение нескольких сайтов) в Process Explorer показывает, что он содержит несколько разных доменов приложений с разными экземплярами одних и тех же сборок, загруженных в память. Поэтому перемещение сайтов в один AppPool может не очень помочь.

Но есть и другой вариант. В IIS 8+ вы можете совместно использовать общие сборки в AppPools. Если некоторые сборки используются несколькими AppPools, они загружаются в память только один раз, а затем сглаживаются различными процессами.

Посмотрите этот бит от asp.net и TechNet сообщение в блоге

Вам нужно немного поработать над настройкой, но тогда это работает очень хорошо.