Переход на новые версии платформы 1С:Предприятие (например, с ветки 8.3.13 на 8.3.15 или 8.3.16) часто преподносит неприятные сюрпризы системным администраторам и пользователям. Одной из наиболее раздражающих проблем является внезапный разрыв соединения с веб-сервером IIS, сопровождающийся ошибкой: «Сеанс отсутствует или удален» с указанием на файлы исходного кода платформы, такие как SeanceContextImpl.cpp или ClusterDistribImpl.cpp.
Особенно остро эта проблема проявляется при работе в нескольких информационных базах параллельно или при выполнении ресурсоемких фоновых заданий (например, динамических списков). В этой статье мы подробно разберем, почему возникает данная ошибка на веб-сервере IIS и как по шагам настроить серверную инфраструктуру, чтобы вернуть системе былую стабильность.
Прежде чем переходить к настройкам, давайте проанализируем ситуацию. Начиная с версии 8.3.15, платформа 1С претерпела значительные внутренние изменения в механизмах управления сеансами и кэширования данных. При стандартной публикации баз на IIS под управлением операционных систем Windows Server могут возникать следующие конфликты:
w3wp.exe ограничен лимитом виртуальной памяти в 2 ГБ. Как только пользователи начинают активно работать в трех базах одновременно, лимит превышается, процесс аварийно завершается, и все активные сеансы мгновенно уничтожаются.Рассмотрим по шагам методы устранения этой проблемы.
Если вы до сих пор используете 32-разрядную версию платформы на веб-сервере — это первая и главная причина нестабильности. Настоятельно рекомендуем выполнить переход на 64-разрядную платформу.
После установки 64-битной версии платформы 1С убедитесь, что пул приложений в IIS настроен соответствующим образом:
False.Это позволит рабочему процессу веб-сервера w3wp.exe использовать всю доступную оперативную память сервера, полностью исключая падения по нехватке памяти.
По умолчанию IIS оптимизирован под стандартные веб-сайты, а не под тяжелые учетные системы класса ERP. Изменим настройки пула приложений, чтобы предотвратить принудительное завершение рабочих процессов:
20. Установите его в значение 0. Это запретит IIS завершать рабочий процесс при отсутствии пользовательской активности.1740 минут. Отключите этот параметр, установив значение в 0. Вместо этого настройте перезапуск пула по расписанию на глубокую ночь (например, в 03:00), когда в базах гарантированно нет активных пользователей.ApplicationPoolIdentity укажите выделенного системного пользователя (желательно локального администратора сервера), который имеет полные права на чтение/запись каталога с базами данных (если они файловые) и временных папок Windows (папка Temp).Если на одном веб-сервере опубликовано несколько информационных баз, крайне важно разнести их по разным пулам приложений. По умолчанию при публикации через конфигуратор все базы могут привязываться к одному пулу (например, DefaultAppPool).
Если в одной из баз произойдет сбой или критическая ошибка, рабочий процесс этого пула будет перезапущен, что автоматически оборвет сеансы пользователей во всех остальных базах, привязанных к данному пулу. Создайте для каждой информационной базы свой собственный пул приложений в IIS и привяжите публикации к ним.
При клиент-серверном варианте работы проблема может крыться в повреждении кэша сеансовых данных на стороне самого сервера «1С:Предприятие». Проанализируем, как правильно выполнить его очистку:
services.msc.C:\Program Files\1cv8\srvinfo\reg_1541\
snccntx (например, snccntxce54f128...). Это и есть кэш контекста сеансов.Платформа 1С чувствительна к сетевой адресации. При наличии активного протокола IPv6 в Windows Server запросы от IIS к рабочим процессам 1С могут периодически перемаршрутизироваться, из-за чего сервер начинает считать сеанс «чужим» и генерирует ошибку безопасности. Для надежности рекомендуется полностью отключить IPv6 через реестр:
regedit.HKLM\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters
DWORD (32 бита) с именем DisabledComponents и присвойте ему шестнадцатеричное значение 0xFFFFFFFF.Иногда веб-сервер обрывает сеанс при выполнении длительных транзакций или тяжелых отчетов, так как считает, что клиент перестал отвечать. Мы можем вручную увеличить таймауты ожидания. Для этого найдите файл публикации default.vrd в каталоге, куда была опубликована база 1С (например, C:\inetpub\wwwroot\MyBase\), откройте его в текстовом редакторе и добавьте параметры таймаутов:
<?xml version="1.0" encoding="UTF-8"?>
<point xmlns="http://v8.1c.ru/8.2/mws"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
base="/MyBase"
ib="File="C:\1C_Bases\MyBase";">
<ws connectionTimeout="60000" />
<httpServices connectionTimeout="60000" />
</point>
Параметр connectionTimeout="60000" задает время ожидания в миллисекундах (в данном примере — 60 секунд), что убережет длительные фоновые запросы от преждевременного закрытия веб-сервером.
Если системные ограничения или особенности инфраструктуры не позволяют добиться стабильной работы IIS на релизах платформы 1С 8.3.15 и 8.3.16, отличной альтернативой станет переход на веб-сервер Apache. Как показывает практика многих системных администраторов, связка Apache 2.4 x64 и платформа 1С:Предприятие x64 работает «из коробки» без постоянных утечек памяти и аварийных завершений сеансов, стабильно переваривая тысячи запросов фонового поиска и динамических списков.