Почему зависают и дублируются сессии в 1С:Предприятие и как решить проблему?

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

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

1. Проверка стабильности локальной сети и передача больших пакетов

Одной из наиболее частых причин зависания сессий является кратковременная потеря пакетов в локальной сети. Режим работы «Толстый клиент» крайне чувствителен к сетевым задержкам и нестабильности соединений. В отличие от стандартного обмена трафиком, платформа 1С передает данные крупными порциями. Обычная проверка связи командой ping с параметрами по умолчанию отсылает пакеты размером всего 32 байта, что не позволяет выявить проблемы с фрагментацией и буферизацией на сетевом оборудовании.

Протестируем сетевое соединение от клиента до сервера 1С с увеличенным размером пакета:

ping IP_АДРЕС_СЕРВЕРА -l 60000 -t

Проанализируем результаты выполнения команды:

  1. Наличие потерь пакетов (Request timed out): указывает на физические дефекты кабельных трасс, проблемы с разъемами RJ-45, некорректную работу дешевых коммутаторов или перегрузку портов.
  2. Резкие скачки времени отклика: свидетельствуют о переполнении сетевых буферов или коллизиях в сети. При подобных сбоях сокет разрывается, клиент 1С аварийно завершает работу или переподключается, а на сервере остается зависший сеанс.

2. Настройка сетевого стека TCP/IP и параметров сетевых адаптеров

Если сетевой сбой происходит без явного закрытия TCP-соединения, серверная операционная система продолжает считать сокет активным в течение системного таймаута Keep-Alive. По умолчанию в Windows этот параметр составляет 2 часа (7 200 000 мс).

Для ускорения обнаружения «мертвых» клиентских подключений скорректируем системные таймауты в ветке реестра сервера:

HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

  1. KeepAliveTime: установим значение 300000 (тип DWORD, 5 минут).
  2. KeepAliveInterval: установим значение 1000 (тип DWORD, 1 секунда).

Дополнительно проверим параметры сетевых карт на клиентах и сервере:

  1. Энергосбережение: на клиентских машинах в диспетчере устройств в свойствах сетевого адаптера снимем флаг «Разрешить отключение этого устройства для экономии энергии». При переходе ПК в режим простоя адаптер может засыпать, мгновенно разрывая сессию с сервером 1С.
  2. Аппаратная разгрузка (Offloading): на сетевой карте сервера отключим параметры IPv4 Checksum Offload, Large Send Offload (LSO) и TCP Chimney Offload, так как некорректная работа драйверов сетевой карты при аппаратной обработке пакетов часто приводит к зависанию сессий под нагрузкой.

3. Очистка кэша сеансовых данных кластера и регламентный перезапуск

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

Выполним процедуру очистки кэша сеансов:

  1. Остановим службу агента сервера 1С:Предприятие (ragent.exe).
  2. Перейдем в каталог данных кластера (по умолчанию: C:\Program Files\1cv8\srvinfo\reg_1541\).
  3. Найдем и удалим каталог, имя которого начинается с snccntx (например, snccntx12345...). В этой папке хранятся сеансовые данные.
  4. Запустим службу сервера 1С.

Также настроим в свойствах кластера автоматический перезапуск рабочих процессов (rphost.exe) с интервалом 86400 секунд (раз в сутки) и включим параметр завершения проблемных процессов.

4. Автоматическое завершение спящих сеансов в кластере 1С

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

  1. Откроем консоль администрирования 1С, перейдем в ветку Информационные базы и откроем свойства нужной базы.
  2. Зададим параметр «Время засыпания пассивных сеансов» — период неактивности пользователя (например, 1200 секунд), после которого сессия переходит в спящий режим.
  3. Зададим параметр «Время завершения спящих сеансов» — время (например, 600 секунд), по истечении которого кластер принудительно удаляет уснувший сеанс и снимает все установленные им блокировки.

5. Локализация причин через Технологический журнал

Если сетевые настройки и очистка кэша не решили проблему, необходимо выяснить точную причину разрыва сессий с помощью Технологического журнала (ТЖ). Для этого создадим файл logcfg.xml в каталоге настроек платформы (C:\Program Files\1cv8\conf\logcfg.xml).

Посмотрим на пример конфигурации журнала для отслеживания разрывов соединений и блокировок:


<config xmlns="http://v8.1c.ru/v8/tech-log">
    <dump location="C:\LOGS\DUMPS" create="true" type="0" prntscrn="false"/>
    <log location="C:\LOGS\TJ" history="24">
        <event>
            <eq property="name" value="CONN"/>
        </event>
        <event>
            <eq property="name" value="SESS"/>
        </event>
        <event>
            <eq property="name" value="TLOCK"/>
        </event>
        <event>
            <eq property="name" value="EXCP"/>
        </event>
        <property name="all"/>
    </log>
</config>

Проанализируем события, попадающие в лог:

  1. CONN и SESS: показывают инициатора закрытия сессии (штатный выход, сброс сокета клиентом или удаление процесса кластером).
  2. EXCP: фиксирует сетевые исключения и системные ошибки сокетов операционной системы.
  3. TLOCK: позволяет увидеть, какой именно сеанс удерживает транзакционную блокировку на объекте и не дает параллельным процессам выполнить запись или проведение.

6. Архитектурные рекомендации

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

  1. Терминальный сервер (RDP): запуск клиентов 1С непосредственно на сервере терминалов исключает влияние нестабильности клиентской локальной сети на сокеты кластера 1С.
  2. Тонкий клиент и веб-сервер: публикация базы данных на веб-сервере (IIS или Apache) с подключением через протоколы HTTP/HTTPS. Веб-протоколы устойчивы к кратковременным разрывам связи и корректно восстанавливают соединение без зависания сеансовых блокировок в СУБД.
← На главную