Каковы плюсы и минусы использования IIS как 32-битной против 64-битной на 64-битной ОС?
Возможно, лучше подходит для "переполнения стоек", но с точки зрения разработчика, каковы преимущества и недостатки использования IIS (обслуживающего как устаревший классический ASP, так и.NET) в качестве 32-битного процесса вместо 64-битного процесса на 64-битном хосте Windows?
Основное преимущество 32/64 (iis/server) перед 32/32, по-видимому, заключается в возможности использовать до 4 ГБ памяти на процесс IIS.
Преимущества, которые я ожидаю от 32/64 по сравнению с 64/64, заключаются в том, что легче получить доступ к унаследованным 32-битным внутрипроцессным DLL-библиотекам (из которых у нас еще есть одна от поставщика-партнера, от которого мы не можем сразу отказаться) и, возможно, меньший объем памяти для того же кода с учетом меньших указателей памяти.
Есть ли какие-либо преимущества в производительности 64/64 по сравнению с 32/64 или что-то еще, что потребовало бы полного переключения сейчас? Я сделал здесь какие-то ложные предположения?
6 ответов
Единственное преимущество работы IIS на 64-битном 32-битном vevrsus - это возможность доступа к гораздо большему адресному пространству памяти.
Если вы выполняете обычную обработку ASPX-страниц, то, скорее всего, вам не нужно обращаться к более чем 4 ГБ из какого-либо одного процесса. Предположим, вы работаете в 32-битном режиме с веб-садом с несколькими рабочими процессами на одном компьютере. В этом случае каждый процесс может адресовать до 4 ГБ.
Большое преимущество может прийти, когда вы выполняете кеширование. 64-разрядный процесс может поддерживать огромный кэш в памяти (при условии, что у вас есть 32 ГБ или более ОЗУ для его поддержки), чтобы вы могли кэшировать сложное содержимое или данные страницы на веб-сервере. Это позволяет получить прибыль, когда данные дороже генерировать, чем извлекать - например, если данные представляют собой сложную форму (скажем, результат моделирования Монте-Карло), или если данные находятся вне коробки и в сети Время ввода-вывода намного дороже, чем время поиска в кэше.
Если вы не используете кеширование, то 64-битный IIS вам не поможет. Для каждого поиска потребуются 64-битные указатели, что сделает все немного медленнее.
64-разрядные серверы гораздо более эффективны при использовании для баз данных, таких как SQL Server или других серверов управления данными (скажем, корпоративный почтовый сервер, например Exchange), чем для серверов обработки, таких как IIS или рабочие процессы, которыми он управляет. Благодаря 64-разрядному адресному пространству серверы, которым необходимо управлять данными, могут хранить в памяти гораздо больше этих данных, а также индексы и другие кэши. Это экономит время ввода-вывода на диск и время обработки при поступлении запроса. Большинству веб-приложений не требуется обрабатывать более 4 ГБ из одного процесса.
Возможно, полезная аналогия: в транспорте большой внедорожник похож на 64-битную машину, а обычный компактный легковой автомобиль - на 32-битный сервер. Вы можете нести гораздо больше вещей в большом внедорожнике, и он имеет большую буксирную способность, рассчитан на 8 человек и GVWR 8600 фунтов. Но со всем этим вы платите. Грузовик тяжелее. Это использует больше топлива. Если вы перевозите только 2 человека и одну дорожную сумку, вам не нужен внедорожник. Вам будет лучше с меньшим транспортным средством. Это может быть быстрее и эффективнее.
Я не думаю, что вы сделали какие-либо ложные предположения. Но я бы сказал, что нет никакой разницы в производительности между сценариями, которые вы наметили. 32 на 64 на Windows не работает на штраф. 64 на 64 может дать небольшое повышение производительности, но это сомнительно. Может быть некоторая экономия памяти с 32-разрядным процессом, но это, вероятно, сведено на нет благодаря тому, что для запуска процесса в первую очередь требуется преобразование.
Единственное преимущество - упомянутая вами проблема с DLL. Это может быть причиной для обновления (если у вас есть что-то конкретно 64-битное, что вам нужно использовать).
У меня был опыт, когда переход с 32-битного Windows 2003 Server на 64-битный Windows 2003 Server с IIS 6 и производительностью веб-сайта ASP.NET 3.5 был неприемлемым.
64-битный сервер будет стабильно работать на 2 секунды позади 32-битного.
После переключения IIS 6 для запуска в качестве 32-разрядного рабочего процесса производительность снова стала равной и сопоставимой.
Я не проверял это, но я думаю, что это может относиться только к IIS6 win2k3, так как тестирование, которое я провел с IIS7 x64 (Vista) и 64-битным рабочим процессом IIS, кажется, работает просто отлично.
Процесс перехода на 32-битный процесс был довольно простым. Вот статья базы знаний с подробностями поддержки: http://support.microsoft.com/kb/894435/en-us
ASP.NET 2.0, 32-разрядная версия Чтобы запустить 32-разрядную версию ASP.NET 2.0, выполните следующие действия.
- Нажмите "Пуск", выберите "Выполнить", введите cmd и нажмите кнопку "ОК".
- Введите следующую команду, чтобы включить 32-разрядный режим: cscript %SYSTEMDRIVE%\inetpub\adminscripts\adsutil.vbs SET W3SVC/AppPools/Enable32bitAppOnWin64 1
- Введите следующую команду, чтобы установить версию ASP.NET 2.0 (32-разрядная версия) и установить сопоставления сценариев в корне IIS и в папке: %SYSTEMROOT%\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -i
- Убедитесь, что в ASP.NET версии 2.0.50727 (32-разрядная версия) установлено значение Разрешено в списке расширений веб-службы в диспетчере служб IIS.
Обратитесь к статье базы знаний по настройке обратно на 64-битную
Помимо очевидных различий в памяти, 32-разрядные процессы в 64-разрядной ОС должны работать в так называемом режиме "Windows в Windows" или в режиме WOW. Это в основном слой thunking/emulation. Производительность снижается, если вы уделяете достаточно внимания.
Доступность памяти приведена в этом блоге msdn.
Наличие памяти. Для моего приложения мы получили то, что нам нужно для переключения с 32-битного процесса на 32-битной ОС на 32-битный процесс на 64-битной ОС, без необходимости замены сторонних библиотек. Итак, мы остановились там. Преимущества: 1) 2-3-кратная эффективная память доступна каждому рабочему процессу IIS и 2) в 32-разрядной ОС, где веб-сайт использует много памяти, другие системные процессы и веб-сайты конкурируют за ограниченный общий объем памяти. Для вашего приложения посмотрите, сколько памяти используют ваши рабочие процессы. Если каждый WP не использует много памяти (более 1 ГБ), 64-разрядные рабочие процессы не сильно помогут.
Для производительности, я думаю, вы должны протестировать свои собственные приложения в обеих конфигурациях. Пост Дэйва выше указывает, что у вас может быть снижение производительности с 64 бит. Как отмечает cheeso, некоторые приложения могут видеть преимущества от кэширования (хотя 2 ГБ + кэша - это много). За исключением ограниченных и простых приложений, я не думаю, что мы сможем сделать обобщение производительности. Мы могли бы указать на конкретные технологии, которые работают лучше или хуже.
Это актуальный совет от Microsoft: «Мы рекомендуем вам настроить IIS для использования 32-битных рабочих процессов в 64-битной Windows. Не только его совместимость лучше, чем нативная 64-битная, но и производительность и потребление памяти также лучше».
Пожалуйста, обратитесь к этой ссылке, размещенной в одном из комментариев выше и опубликованной 14.05.2020: https://docs.microsoft.com/en-us/iis/web-hosting/web-server-for-shared-hosting/32-битные рабочие процессы
Я не могу утверждать, что точно понимаю, почему, но этот совет очень ясен: с 64-битными рабочими местами виртуальное адресное пространство больше, поэтому 32-битные рабочие процессы, как правило, более эффективны.