У меня есть устаревшее веб-приложение ASP, которое использует VB6 DLL. Приложение потребляет много памяти. Мне нужно запустить несколько экземпляров приложения на одном компьютере. Теперь, поскольку библиотеки DLL VB6 являются только 32-битными, работа в 64-битном процессе отсутствует - но что, если я запустил несколько 32-битных пулов приложений IIS? Будет ли ограничение памяти 1,2 ГБ на каждый удар для каждого пула приложений, или будет ли ограничение памяти для всех процессов пула приложений? Кто-нибудь, у кого есть опыт в этом?
но что, если я запустил несколько 32-битных пулов приложений IIS? Будет ли предел памяти 1,2 ГБ на каждый удар для каждого пула приложений, или будет ли ограничение памяти для всех процессов пула приложений?
Ограничение на процесс применяется к каждому процессу, и каждый пул приложений находится в своем собственном процессе. Таким образом, вы можете использовать произвольно большой объем памяти, запуская множество пулов приложений.
Кроме того, это не 1,2 ГБ, а 4 ГБ.
По умолчанию 32-битный процесс получает 2 ГБ «пользовательского пространства», если исполняемый файл не собран с флагом «Large Address Aware», и в этом случае он получает 3 ГБ на 32-битной ОС с соответствующим флагом времени загрузки (что ограничивает пространство ядра - с его собственные последствия), но в 64-битной ОС это 4 ГБ пользовательского пространства (не требуется флаг загрузки и никаких последствий для памяти ядра).
32-битный w3wp.exe
(исполняемый файл, в котором размещаются пулы приложений) построен с флагом Large Address Aware, как видно из запуска dumpbin /headers w3wp.exe
в %SystemRoot%\SysWow64\inetsrv
папка.
Просто чтобы добавить нюанс в исходный пост, вы МОЖЕТЕ эффективно используйте эту 32-разрядную DLL из собственного 64-разрядного пула приложений IIS.
По сути, вам нужно инкапсулировать эту DLL с помощью службы компонентов COM +. Это займет у вас 5 минут, и вы сможете использовать обычный исходный код Classic ASP без каких-либо изменений (Server.CreateObject).
Я использую эту процедуру для некоторых из моих пользовательских DLL, а также для других, которые больше не доступны ни в одной другой версии, кроме 32-разрядной DLL.
Здесь объясняется процедура: http://www.chestysoft.com/component-services.asp