Как устранить проблему «зависших» сеансов 1С при работе через RDP?

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

Проблема «зависших» или «фантомных» сеансов в 1С:Предприятие — это классическая ситуация для клиент-серверной архитектуры, особенно когда пользователи работают через RDP (Remote Desktop Protocol). Суть проблемы заключается в том, что пользователь закрывает программу (или сеанс RDP прерывается), а на сервере приложений 1С сеанс продолжает числиться активным. Такие сеансы могут занимать лицензии, блокировать записи в базе данных и потреблять ресурсы сервера впустую.

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

1. Настройка параметров кластера 1С

Первым делом нам необходимо заглянуть в консоль Администрирования серверов 1С. Именно здесь задаются базовые правила «жизненного цикла» каждого сеанса. Выясним причину, по которой сервер считает сеанс активным, даже если клиентское приложение уже закрыто.

В свойствах рабочего сервера (или параметров информационной базы, в зависимости от версии платформы) нас интересуют два ключевых таймаута:

  1. Время засыпания пассивного сеанса: Этот параметр определяет, через какой период бездействия пользователя сервер пометит сеанс как «спящий». В этом состоянии сеанс еще удерживает лицензию, но сервер готов к его скорому завершению. Рекомендуем установить значение 1200 (20 минут) или 1800 (30 минут).
  2. Время завершения спящего сеанса: Это критически важный параметр. Он указывает, через сколько секунд после перехода в спящий режим сеанс будет окончательно удален сервером. Если здесь стоит 0, сеанс может висеть вечно. Оптимально установить от 600 до 1200 секунд.

Разберем на примере: если мы установим оба параметра по 1200 секунд, то через 40 минут полной неактивности (или после некорректного закрытия приложения) сервер гарантированно очистит список активных пользователей.

2. Настройка TCP/IP Keep-Alive на уровне ОС

Часто сервер приложений 1С продолжает «держать» соединение, потому что протокол TCP считает сокет открытым. Если клиент отключился некорректно (например, пропал интернет или завис процесс 1cv8.exe), сервер ждет подтверждения от клиента. По умолчанию в Windows время ожидания может составлять до 2 часов.

Чтобы ускорить этот процесс, нам нужно изменить параметры Keep-Alive в реестре Windows на сервере 1С. Разберем по шагам, какие ключи нужно создать или изменить в ветке HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters:

Пример внесения изменений через реестр (командная строка от администратора):


reg add "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v KeepAliveTime /t REG_DWORD /d 300000 /f
reg add "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v KeepAliveInterval /t REG_DWORD /d 1000 /f

После внесения этих изменений операционная система будет гораздо быстрее определять «мертвые» сетевые сеансы и сообщать об этом серверу 1С.

3. Оптимизация работы через RDP и Групповые политики

Поскольку в нашем случае используется RDP, велика вероятность, что сеансы висят из-за того, что пользователи просто закрывают окно терминала «крестиком». При этом сеанс внутри Windows переходит в статус Disconnected, но все процессы (включая 1С) продолжают выполняться.

Проанализируем настройки групповых политик (GPO) на терминальном сервере. Нам нужно настроить автоматическое завершение отключенных сеансов:

  1. Откройте редактор локальной групповой политики (gpedit.msc).
  2. Перейдите в раздел: Конфигурация компьютера — Административные шаблоны — Компоненты Windows — Службы удаленных рабочих столов — Узел сеансов удаленных рабочих столов — Ограничения по времени для сеансов.
  3. Найдите параметр «Задать ограничение по времени для отключенных сеансов». Включите его и установите значение 5 минут или 15 минут.

Теперь, как только пользователь закроет окно RDP, через 5–15 минут операционная система принудительно завершит его сеанс, что приведет к корректному закрытию 1cv8.exe и освобождению лицензии 1С.

4. Проблема внешних компонент и драйверов

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

Что мы можем сделать в этой ситуации?

Во-первых, проанализируем используемые драйверы. Рекомендуется переходить с устаревших COM-технологий на современные Native API драйверы, которые поставляются самой фирмой 1С или сертифицированными производителями. Они работают более стабильно и корректно освобождают ресурсы.

Во-вторых, если проблему вызывает dlm.exe или подобные службы лицензирования драйверов, имеет смысл вынести их работу в отдельные процессы или настроить их перезапуск по расписанию.

5. Использование утилиты RAC для автоматизации очистки

Если штатные средства не справляются, мы можем прибегнуть к автоматизации с помощью утилиты RAC (Remote Administration Console). Это консольная версия администрирования 1С, которая позволяет программно управлять сеансами.

Рассмотрим пример логики скрипта (PowerShell), который можно запускать по планировщику раз в час:

  1. Скрипт подключается к кластеру через ras.
  2. Получает список всех сеансов информационной базы.
  3. Анализирует поле LastActive (время последней активности).
  4. Если активность отсутствует более 2 часов, скрипт выполняет команду session terminate.

Пример команды для завершения конкретного сеанса:

rac session --cluster={ID-кластера} terminate --session={ID-сеанса}

Использование таких скриптов — это «тяжелая артиллерия», которая помогает поддерживать порядок в высоконагруженных системах, где количество пользователей исчисляется сотнями.

6. Проверка фоновых заданий

Выясним еще одну неочевидную причину: иногда сеанс не закрывается, потому что сервер 1С считает, что в нем выполняется важная работа. Это происходит, если в сеансе пользователя было инициировано фоновое задание или запущена длительная процедура с использованием ПодключитьОбработчикОжидания.

Посмотрите в консоли администрирования 1С столбец «Фоновые задания». Если вы видите, что за «висящим» сеансом закреплено активное задание, значит, проблема в программном коде конфигурации. Необходимо оптимизировать длительные операции, чтобы они не блокировали завершение работы пользователя.

Подводя итог, скажем, что наиболее эффективным решением является комплексный подход: настройка таймаутов в консоли 1С, ограничение времени жизни сеансов в RDP и корректировка параметров Keep-Alive в реестре Windows. Это позволит системе автоматически очищать «мусорные» сеансы, сохраняя лицензии и производительность сервера.

← На главную