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

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

Зависание соединений, когда запись в консоли кластера активна, а реальный сеанс пользователя отсутствует, — это классическая проблема администрирования платформы 1С:Предприятие. Давайте разберем, почему это происходит, как запретить лишние сеансы для одного пользователя и как бороться с зависаниями системными методами, не прибегая каждый раз к радикальной перезагрузке службы rphost или всего агента сервера.

Причины возникновения «мертвых» соединений

Прежде чем приступать к исправлению, проанализируем, почему сеанс пропадает, а соединение «висит». Основные причины кроются в нарушении процесса корректного завершения TCP-сессии между клиентом и сервером:

  1. Разрывы сети: При нестабильном соединении или переходе клиента в спящий режим сервер не получает пакет FIN или RST и продолжает удерживать соединение, ожидая данных.
  2. Аварийное завершение процесса: Если клиентское приложение было принудительно завершено через «Диспетчер задач» или завершилось с критической ошибкой (для их предотвращения полезен анализ конфигурации на ошибки), сервер 1С может не успеть получить сигнал об отключении.
  3. Проблемы COM-соединений: При выполнении внешних обработок или обменов через COMConnector (например, при сверке остатков между базами) соединение часто остается активным, если внешний объект не был явно выгружен из памяти.

Как диагностировать причину проблемы

Для глубокого анализа ситуации нам необходимо использовать Технологический журнал (ТЖ). Чтобы понять, кто и почему «завис», настроим сбор событий в файле logcfg.xml. Рассмотрим, какие события нам критически важны для анализа:

Нам потребуются события:

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

Методы борьбы с зависшими соединениями

Разберем способы автоматизации очистки соединений, чтобы исключить ручное управление.

1. Принудительное завершение через COM-объект

Если проблема возникает регулярно, можно написать внешнюю обработку, которая подключается к кластеру 1С через COM-объект и программно завершает «битые» соединения. Это более изящный метод, чем перезапуск службы.


// Пример логики поиска зависшего соединения
Соединитель = Новый COMОбъект(\"V83.COMConnector\");
Агент = Соединитель.ConnectAgent(\"АдресСервера\");
Кластеры = Агент.GetClusters();
// Перебираем кластеры и соединения, находим те, у которых нет сеанса, и вызываем:
Агент.DisconnectConnection(Кластер, Соединение);

2. Использование утилиты RAC (Remote Administration Console)

Это штатный инструмент командной строки, который позволяет управлять кластером напрямую. Мы можем создать bat-скрипт или PowerShell-скрипт, который будет запускаться по расписанию через планировщик задач Windows. Скрипт будет опрашивать текущий список соединений и, сравнивая их с активными сеансами, принудительно удалять «сиротские» записи.

Для работы с rac используем команды поиска активных соединений и их удаления по ID, если время жизни соединения без активности превышает допустимый порог.

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

Посмотрим на настройки свойств информационной базы в консоли кластера. Правильная настройка следующих параметров поможет минимизировать количество зависаний:

Заключение

Не стоит пытаться решить проблему методом постоянного перезапуска агента сервера 1С — это ведет к кратковременной остановке работы всех пользователей. Используйте Технологический журнал для поиска первопричины (кто вызывает зависание) и автоматизируйте очистку через RAC или внешние обработки на COM. Это обеспечит стабильную работу вашей системы ERP 2.1 без необходимости «ручного управления» инфраструктурой.

← На главную