Зависание соединений, когда запись в консоли кластера активна, а реальный сеанс пользователя отсутствует, — это классическая проблема администрирования платформы 1С:Предприятие. Давайте разберем, почему это происходит, как запретить лишние сеансы для одного пользователя и как бороться с зависаниями системными методами, не прибегая каждый раз к радикальной перезагрузке службы rphost или всего агента сервера.
Прежде чем приступать к исправлению, проанализируем, почему сеанс пропадает, а соединение «висит». Основные причины кроются в нарушении процесса корректного завершения TCP-сессии между клиентом и сервером:
FIN или RST и продолжает удерживать соединение, ожидая данных.COMConnector (например, при сверке остатков между базами) соединение часто остается активным, если внешний объект не был явно выгружен из памяти.Для глубокого анализа ситуации нам необходимо использовать Технологический журнал (ТЖ). Чтобы понять, кто и почему «завис», настроим сбор событий в файле logcfg.xml. Рассмотрим, какие события нам критически важны для анализа:
Нам потребуются события:
CONN — для отслеживания установления и разрыва соединений.SESN — для мониторинга активности сеансов пользователей.EXCP — для фиксации ошибок, приводящих к аварийным завершениям.CLSTR — для анализа работы процессов кластера.Собрав данные за период возникновения проблемы, мы сможем увидеть, был ли отправлен сигнал на завершение сеанса и по какой причине сервер его проигнорировал.
Разберем способы автоматизации очистки соединений, чтобы исключить ручное управление.
Если проблема возникает регулярно, можно написать внешнюю обработку, которая подключается к кластеру 1С через COM-объект и программно завершает «битые» соединения. Это более изящный метод, чем перезапуск службы.
// Пример логики поиска зависшего соединения
Соединитель = Новый COMОбъект(\"V83.COMConnector\");
Агент = Соединитель.ConnectAgent(\"АдресСервера\");
Кластеры = Агент.GetClusters();
// Перебираем кластеры и соединения, находим те, у которых нет сеанса, и вызываем:
Агент.DisconnectConnection(Кластер, Соединение);
Это штатный инструмент командной строки, который позволяет управлять кластером напрямую. Мы можем создать bat-скрипт или PowerShell-скрипт, который будет запускаться по расписанию через планировщик задач Windows. Скрипт будет опрашивать текущий список соединений и, сравнивая их с активными сеансами, принудительно удалять «сиротские» записи.
Для работы с rac используем команды поиска активных соединений и их удаления по ID, если время жизни соединения без активности превышает допустимый порог.
Посмотрим на настройки свойств информационной базы в консоли кластера. Правильная настройка следующих параметров поможет минимизировать количество зависаний:
Не стоит пытаться решить проблему методом постоянного перезапуска агента сервера 1С — это ведет к кратковременной остановке работы всех пользователей. Используйте Технологический журнал для поиска первопричины (кто вызывает зависание) и автоматизируйте очистку через RAC или внешние обработки на COM. Это обеспечит стабильную работу вашей системы ERP 2.1 без необходимости «ручного управления» инфраструктурой.