Как исправить ошибку «Сеанс отсутствует или удален» в 1С при работе через IIS после обновления платформы?

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

Переход на новые версии платформы 1С:Предприятие (например, с ветки 8.3.13 на 8.3.15 или 8.3.16) часто преподносит неприятные сюрпризы системным администраторам и пользователям. Одной из наиболее раздражающих проблем является внезапный разрыв соединения с веб-сервером IIS, сопровождающийся ошибкой: «Сеанс отсутствует или удален» с указанием на файлы исходного кода платформы, такие как SeanceContextImpl.cpp или ClusterDistribImpl.cpp.

Особенно остро эта проблема проявляется при работе в нескольких информационных базах параллельно или при выполнении ресурсоемких фоновых заданий (например, динамических списков). В этой статье мы подробно разберем, почему возникает данная ошибка на веб-сервере IIS и как по шагам настроить серверную инфраструктуру, чтобы вернуть системе былую стабильность.

Выясняем причины: почему «вылетают» сеансы?

Прежде чем переходить к настройкам, давайте проанализируем ситуацию. Начиная с версии 8.3.15, платформа 1С претерпела значительные внутренние изменения в механизмах управления сеансами и кэширования данных. При стандартной публикации баз на IIS под управлением операционных систем Windows Server могут возникать следующие конфликты:

  1. Ограничение памяти для 32-разрядных процессов. Если на сервере установлена 32-битная версия платформы 1С или пул приложений IIS работает в 32-битном режиме, рабочий процесс w3wp.exe ограничен лимитом виртуальной памяти в 2 ГБ. Как только пользователи начинают активно работать в трех базах одновременно, лимит превышается, процесс аварийно завершается, и все активные сеансы мгновенно уничтожаются.
  2. Агрессивный рециклинг (перезапуск) пулов в IIS. По умолчанию IIS настроен так, чтобы периодически перезапускать рабочие процессы для предотвращения утечек памяти. Каждый такой перезапуск обрывает текущие сеансы пользователей 1С.
  3. Таймаут простоя (Idle Time-out). Если к базе никто не обращается определенное время, IIS «усыпляет» процесс. Первый же зашедший после этого пользователь получает ошибку отсутствия сеанса, так как контекст базы инициализируется заново.

Рассмотрим по шагам методы устранения этой проблемы.

Шаг 1. Переход на 64-разрядную версию платформы 1С и IIS

Если вы до сих пор используете 32-разрядную версию платформы на веб-сервере — это первая и главная причина нестабильности. Настоятельно рекомендуем выполнить переход на 64-разрядную платформу.

После установки 64-битной версии платформы 1С убедитесь, что пул приложений в IIS настроен соответствующим образом:

  1. Откройте Диспетчер служб IIS.
  2. Перейдите в раздел Пулы приложений (Application Pools).
  3. Выберите пул, на котором опубликована ваша база 1С, и нажмите Дополнительные параметры (Advanced Settings) в правом меню.
  4. Найдите параметр Разрешены 32-разрядные приложения (Enable 32-Bit Applications) и установите его в значение False.

Это позволит рабочему процессу веб-сервера w3wp.exe использовать всю доступную оперативную память сервера, полностью исключая падения по нехватке памяти.

Шаг 2. Настройка пула приложений IIS (Application Pool)

По умолчанию IIS оптимизирован под стандартные веб-сайты, а не под тяжелые учетные системы класса ERP. Изменим настройки пула приложений, чтобы предотвратить принудительное завершение рабочих процессов:

  1. В Дополнительных параметрах вашего пула приложений перейдите к разделу Модель процесса (Process Model).
  2. Найдите параметр Время ожидания в режиме простоя (минуты) (Idle Time-out). По умолчанию там установлено значение 20. Установите его в значение 0. Это запретит IIS завершать рабочий процесс при отсутствии пользовательской активности.
  3. Перейдите в раздел Рециклинг (Recycling). По умолчанию там задан интервал перезапуска в 1740 минут. Отключите этот параметр, установив значение в 0. Вместо этого настройте перезапуск пула по расписанию на глубокую ночь (например, в 03:00), когда в базах гарантированно нет активных пользователей.
  4. В поле Удостоверение (Identity) вместо стандартного ApplicationPoolIdentity укажите выделенного системного пользователя (желательно локального администратора сервера), который имеет полные права на чтение/запись каталога с базами данных (если они файловые) и временных папок Windows (папка Temp).
  5. В поле Версия среды .NET CLR (в основных свойствах пула) выберите значение Без управляемого кода (No Managed Code). Веб-расширение 1С не использует .NET, поэтому отключение этой интеграции снизит накладные расходы и повысит стабильность.

Шаг 3. Изоляция баз по разным пулам приложений

Если на одном веб-сервере опубликовано несколько информационных баз, крайне важно разнести их по разным пулам приложений. По умолчанию при публикации через конфигуратор все базы могут привязываться к одному пулу (например, DefaultAppPool).

Если в одной из баз произойдет сбой или критическая ошибка, рабочий процесс этого пула будет перезапущен, что автоматически оборвет сеансы пользователей во всех остальных базах, привязанных к данному пулу. Создайте для каждой информационной базы свой собственный пул приложений в IIS и привяжите публикации к ним.

Шаг 4. Очистка кэша сеансовых данных 1С

При клиент-серверном варианте работы проблема может крыться в повреждении кэша сеансовых данных на стороне самого сервера «1С:Предприятие». Проанализируем, как правильно выполнить его очистку:

  1. Остановите службу Агент сервера 1С:Предприятие через оснастку services.msc.
  2. Перейдите в каталог хранения служебных файлов сервера. По умолчанию для 64-битной версии это путь: C:\Program Files\1cv8\srvinfo\reg_1541\
  3. Найдите внутри каталога вашего кластера папки, названия которых начинаются на snccntx (например, snccntxce54f128...). Это и есть кэш контекста сеансов.
  4. Полностью удалите эти папки.
  5. Запустите службу Агента 1С обратно. При первом подключении пользователей эти каталоги пересоздадутся автоматически в «чистом» виде.

Шаг 5. Отключение протокола IPv6

Платформа 1С чувствительна к сетевой адресации. При наличии активного протокола IPv6 в Windows Server запросы от IIS к рабочим процессам 1С могут периодически перемаршрутизироваться, из-за чего сервер начинает считать сеанс «чужим» и генерирует ошибку безопасности. Для надежности рекомендуется полностью отключить IPv6 через реестр:

  1. Откройте редактор реестра regedit.
  2. Перейдите по пути: HKLM\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters
  3. Создайте параметр DWORD (32 бита) с именем DisabledComponents и присвойте ему шестнадцатеричное значение 0xFFFFFFFF.
  4. Перезагрузите сервер для применения настроек.

Шаг 6. Ручная корректировка таймаутов в файле default.vrd

Иногда веб-сервер обрывает сеанс при выполнении длительных транзакций или тяжелых отчетов, так как считает, что клиент перестал отвечать. Мы можем вручную увеличить таймауты ожидания. Для этого найдите файл публикации 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=&quot;C:\1C_Bases\MyBase&quot;;">
    <ws connectionTimeout="60000" />
    <httpServices connectionTimeout="60000" />
</point>

Параметр connectionTimeout="60000" задает время ожидания в миллисекундах (в данном примере — 60 секунд), что убережет длительные фоновые запросы от преждевременного закрытия веб-сервером.

Альтернативный вариант: переход на веб-сервер Apache

Если системные ограничения или особенности инфраструктуры не позволяют добиться стабильной работы IIS на релизах платформы 1С 8.3.15 и 8.3.16, отличной альтернативой станет переход на веб-сервер Apache. Как показывает практика многих системных администраторов, связка Apache 2.4 x64 и платформа 1С:Предприятие x64 работает «из коробки» без постоянных утечек памяти и аварийных завершений сеансов, стабильно переваривая тысячи запросов фонового поиска и динамических списков.

← На главную