Как оптимизировать работу IIS при аварийном завершении процесса w3wp.exe с файловыми базами 1С

Системный администратор 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Рассмотрим распространенную проблему при публикации нескольких файловых информационных баз 1С (например, 1С:Бухгалтерия 8 и 1С:Зарплата и Управление Персоналом 8) на веб-сервере IIS. Когда несколько пользователей одновременно работают в разных конфигурациях, рабочий процесс веб-сервера w3wp.exe падает при достижении объема занимаемой оперативной памяти около 3.8 ГБ, и все сеансы пользователей аварийно завершаются.

Проанализируем причины этой нестабильности и разберем пошаговые методы настройки веб-сервера IIS для надежной и непрерывной работы.

Причина падения процесса w3wp.exe при работе с 1С

Выясним, почему происходит сбой. По умолчанию все информационные базы 1С, опубликованные на IIS, используют один общий пул приложений (DefaultAppPool). Это означает, что все запросы ко всем базам обрабатываются в рамках одного и того же системного процесса w3wp.exe.

Если на веб-сервере используется 32-разрядная (x86) платформа 1С и соответствующий модуль расширения wsisapi.dll, процесс w3wp.exe запускается в 32-битом режиме. Максимальный объем виртуальной адресной памяти для 32-битного процесса в ОС Windows ограничен 4 ГБ. На практике при приближении потребления памяти к 3.8 ГБ процесс исчерпывает адресное пространство и аварийно завершается без предупреждения.

Способ 1. Изоляция баз 1С по отдельным пулам приложений IIS

Разберем самый эффективный метод решения проблемы без необходимости смены архитектуры. Чтобы память одной базы не забивала общий процесс, выделим под каждую информационную базу 1С собственный изолированный пул приложений со своим процессом w3wp.exe.

Выполним следующую последовательность действий:

  1. Опубликуем все необходимые информационные базы 1С на веб-сервере IIS стандартным способом через конфигуратор.
  2. Запустим Диспетчер служб IIS (нажмем комбинацию клавиш Win + R, введем inetmgr и нажмем Enter).
  3. В дереве подключений слева выберем раздел Пулы приложений (Application Pools).
  4. На панели действий справа нажмем Добавить пул приложений. Укажем понятное имя пула, например Pool_BP3_Base1.
  5. Если используется 32-разрядная платформа 1С, кликнем правой кнопкой мыши по созданному пулу, выберем Дополнительные параметры и установим значение Разрешены 32-разрядные приложения (Enable 32-Bit Applications) в положение True.
  6. В дереве сайтов IIS найдем опубликованное приложение нужной базы 1С, кликнем по нему правой кнопкой мыши и выберем Управление приложением > Дополнительные параметры.
  7. В поле Пул приложений нажмем кнопку выбора и назначим созданный индивидуальный пул.
  8. Повторим процесс создания и назначения отдельных пулов для каждой из оставшихся баз.

После выполнения этих настроек для каждой информационной базы будет запускаться свой отдельный процесс w3wp.exe. Лимит в 3.8 ГБ будет применяться к каждой базе независимо, что предотвратит падение всего веб-сервера.

Способ 2. Переход на 64-битные компоненты 1С и IIS

Посмотрим на альтернативный вариант решения — переход на 64-разрядную платформу 1С. Это позволит снимать лимит в 4 ГБ на процесс w3wp.exe.

  1. Установим 64-битную версию платформы 1С:Предприятие на сервер.
  2. Переопубликуем информационные базы на веб-сервере, убедившись, что используется 64-битный модуль расширения wsisapi.dll из каталога 64-разрядной платформы.
  3. В свойствах пула приложений IIS установим параметр Разрешены 32-разрядные приложения в значение False.

В 64-битном режиме процесс w3wp.exe сможет адресовать практически неограниченный объем оперативной памяти сервера (ограничиваясь только физическим объемом RAM).

Дополнительные оптимизации пула приложений IIS

Для предотвращения внезапных разрывов сессий пользователей и повисания файловых блокировок выполним тонкую настройку дополнительных параметров пула приложений в IIS:

  1. Отключение тайм-аута простоя: В дополнительных параметрах пула установим значение Тайм-аут задержки (минуты) (Idle Time-out) равным 0. По умолчанию значение составляет 20 минут, из-за чего рабочий процесс завершается при временном отсутствии запросов и рвет соединения пользователей.
  2. Отключение среде .NET CLR: Так как модуль взаимодействия 1С с веб-сервером является компилируемым ISAPI-расширением, выберем параметр Версия среды .NET CLR со значением Без управляемого кода (No Managed Code). Это уменьшит накладные расходы на оперативную память.
  3. Настройка прав доступа: Убедимся, что учетная запись пула (по умолчанию ApplicationPoolIdentity) или группа IIS_IUSRS имеет полные права доступа (чтение, запись, изменение) на папку с файловой базой (файл 1Cv8.1CD) и системный каталог C:\Windows\Temp.
  4. Проверка компонентов IIS: Убедимся, что в компонентах сервера Windows включены параметры Расширения ISAPI (ISAPI Extensions) и Фильтры ISAPI (ISAPI Filters).

Особенности обслуживания файловых баз под IIS

Учитываем особенности файлового режима работы 1С при публикации через веб-сервер:

← На главную