В процессе системного администрирования серверов 1С часто возникает ситуация: открывая консоль управления кластером, мы видим у одного и того же пользователя сразу два зарегистрированных сеанса. При этом у более раннего сеанса поля Сервер, Порт, Процесс и Соединение остаются абсолютно пустыми, а второй сеанс содержит актуальные данные о текущем подключении. В это же самое время пользователи начинают получать предупреждения о нехватке свободных клиентских лицензий. Проанализируем природу этого явления, разберем причины его возникновения и настроим систему для автоматического устранения проблемы.
Для понимания происходящего рассмотрим архитектуру клиент-серверного взаимодействия платформы 1С:Предприятие 8.3. В системе разделяются понятия сеанса и соединения:
rmngr).rphost).Если происходит внезапный обрыв сетевого соединения (например, сбой локальной сети, переключение с Wi-Fi, переход ноутбука пользователя в режим сна или аварийное завершение процесса 1cv8.exe через диспетчер задач), физическое соединение с rphost мгновенно рвется. Однако менеджер кластера rmngr не завершает сеанс сразу, а переводит его в состояние ожидания, надеясь на повторное подключение клиента. В результате в консоли кластера образуется «сеанс-призрак» с пустыми значениями процесса и соединения.
Такой сеанс можно безопасно удалять вручную через контекстное меню консоли кластера. Пользователь от этого не пострадает, так как его текущая работа уже идет в рамках нового активного сеанса.
Ответим на вопрос о лицензиях: зависший сеанс действительно удерживает за собой клиентскую лицензию в том случае, если она выдавалась сервером 1С. Пока сеанс официально зарегистрирован в менеджере кластера rmngr, привязанная к нему программная или аппаратная лицензия считается занятой. Повторный вход пользователя приводит к захвату еще одной лицензии, из-за чего пул доступных лицензий быстро исчерпывается.
Часто на форумах советуют включить параметр «Интервал перезапуска рабочих процессов». Однако важно понимать технический нюанс: эта опция перезапускает только рабочие процессы rphost для освобождения фрагментированной оперативной памяти. Поскольку информация о зависших сеансах без соединений находится в rmngr, перезапуск rphost их не очищает.
Для корректного автоматического удаления брошенных сессий настроим параметры жизненного цикла сеансов в свойствах кластера:
1200 секунд (20 минут). Если за этот интервал клиент не выполняет никаких действий или связь пропала, сеанс помечается как спящий.86400 секунд (24 часа). Именно по этой причине брошенные вчера сеансы продолжают отображаться в списке кластера и удерживать лицензии на следующий день.1200 или 3600 секунд (от 20 минут до 1 часа). Сохраним изменения.Теперь сервер 1С будет самостоятельно удалять потерянные и пассивные сессии, возвращая лицензии в общий пул.
Для предотвращения зависания сессий разберем дополнительные системные меры на уровне операционной системы:
sysctl.conf в Linux позволяет операционной системе быстрее сообщать процессу rmngr о том, что клиентский сокет закрыт.Задать предел времени для отключенных сеансов (например, 15–30 минут), чтобы завершать отключенные сессии Windows вместе с запущенными приложениями 1С.Если требуется жесткий регламентный контроль за состоянием кластера, организуем периодическую проверку сеансов с помощью встроенной консольной утилиты rac и службы администрирования кластера ras. Ниже приведен пример команды для принудительного завершения зависшего сеанса по его идентификатору:
rac session --cluster=<ИдентификаторКластера> terminate --session=<ИдентификаторСеанса>
Скрипт, запускаемый по планировщику задач, может запрашивать список сеансов информационных баз через команду rac session --cluster=<...> list, находить элементы без активных соединений и вызывать команду terminate, поддерживая пул лицензий свободным в автоматическом режиме.