При работе пользователей с файловыми базами 1С:Предприятия, опубликованными на веб-сервере Internet Information Services (IIS) 10.0, системные администраторы часто сталкиваются с внезапным прерыванием работы. В клиентском приложении это выглядит как мгновенное появление предупреждения «Сеанс отсутствует или удален», после чего работа аварийно завершается. При этом в журнале событий Windows (Application Error) регистрируется падение рабочего процесса IIS с кодом события 1000, где виновником сбоя выступает библиотека расширения веб-сервера 1С — ext.dll (код исключения 0xc0000005, указывающий на нарушение прав доступа к памяти — Access Violation).
В этой статье мы подробно проанализируем физические и программные причины этой проблемы, а также рассмотрим комплекс мер по ее полному устранению без необходимости переустановки операционной системы.
Код исключения 0xc0000005 означает, что процесс попытался обратиться к защищенному или несуществующему участку оперативной памяти. В контексте связки IIS и 1С:Предприятия к этому приводят три основные системные причины:
ApplicationPoolIdentity. Это встроенная низкопривилегированная учетная запись Windows, которая не имеет полноценного профиля пользователя. Когда 1С пытается обратиться к системным или временным каталогам для генерации отчетов или записи кэша, она натыкается на блокировку операционной системы, что вызывает моментальный краш библиотеки ext.dll.w3wp.exe ограничен лимитом адресного пространства (около 2-3 Гб). При интенсивной работе нескольких пользователей или формировании объемных отчетов память быстро переполняется, вызывая аварийное завершение процесса.Давайте разберем по шагам, как решить эту проблему раз и навсегда.
Это наиболее эффективное и проверенное решение, которое устраняет корневую причину конфликта прав доступа к системным ресурсам Windows. Нам необходимо перевести работу пула приложений с виртуальной учетной записи на специально созданного локального пользователя с достаточными привилегиями.
Выполним настройку по шагам:
1C_IIS_User) и зададим ему надежный, неистекающий пароль.DefaultAppPool, но настоятельно рекомендуется создать для базы персональный пул). Нажмем на него правой кнопкой мыши и выберем Дополнительные параметры (Advanced Settings)..\1C_IIS_User и его пароль. Подтвердим изменения.Если пул приложений IIS работает без загрузки полноценного пользовательского профиля, у него отсутствуют валидные пути к временным папкам (AppData\Local\Temp). Это гарантированно приводит к падению ext.dll при кэшировании данных 1С.
Выполним следующие действия:
IIS_IUSRS и нашему пользователю 1C_IIS_User на системные временные каталоги. Для этого выполним в командной строке (запущенной от имени администратора) следующие команды:
icacls "C:\Windows\System32\config\systemprofile\AppData\Local\Temp" /grant "IIS_IUSRS":(OI)(CI)F /T
icacls "C:\Windows\SysWOW64\config\systemprofile\AppData\Local\Temp" /grant "IIS_IUSRS":(OI)(CI)F /T
После этого перезапустим службу IIS с помощью команды iisreset в командной строке.
Если на сервере опубликовано несколько баз 1С, совместное использование одного пула (например, DefaultAppPool) часто приводит к взаимным блокировкам и крашам. Сбой в одной базе будет приводить к падению сеансов во всех остальных базах.
Рассмотрим, как изолировать базы:
1C_Pool_Buh), укажем версию среды .NET как Без управляемого кода (No Managed Code) и выберем режим управления Классический или Интегрированный (рекомендуется Классический для стабильности старых платформ).1C_Pool_Buh.Использование 32-битных рабочих процессов часто является скрытым источником утечек памяти и падений при формировании тяжелых отчетов. Для стабильной работы веб-сервера необходимо использовать 64-разрядные компоненты.
Выполним проверку и настройку:
default.vrd (он находится в папке, куда была выполнена публикация базы) и проверим, что физический путь указывает на 64-битную версию библиотеки wsisapi.dll, расположенную в каталоге C:\Program Files\1cv8\... (а не в Program Files (x86)).*.1cws. Оно должно использовать 64-битную dll-библиотеку.Поскольку 1С при формировании отчетов опрашивает принтер по умолчанию, зависшая служба печати или некорректный сетевой принтер гарантированно вызовут падение пула. Проанализируем состояние подсистемы печати сервера:
1C_IIS_User есть доступ к локальной очереди печати.В ходе диагностики вы могли заметить интересную аномалию: после переноса ОС на виртуальную машину выполнение команд sfc /scannow и dism решило проблему, а на "боевом" сервере — нет. Это связано с разницей в аппаратном окружении.
При переносе на виртуальную машину ОС избавляется от привязки к физическим драйверам чипсета, видеокарты и, самое главное, сетевых адаптеров и принтеров. Утилита sfc восстановила стандартные системные библиотеки, которые на виртуалке бесконфликтно заработали со стандартными виртуальными драйверами Microsoft. На физическом же сервере продолжали функционировать проприетарные драйверы оборудования, которые интегрируются в стек сетевых протоколов и графическую подсистему Windows, блокируя корректную работу пула приложений IIS с системными API-функциями. Применение описанных выше решений (смена прав и изоляция пулов) полностью нивелирует эти аппаратные различия.
Для предотвращения падения рабочего процесса веб-сервера w3wp.exe придерживайтесь следующих правил администрирования:
DefaultAppPool под учетной записью ApplicationPoolIdentity для работы с базами 1С.