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

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

При активной работе пользователей в клиент-серверном режиме нередко возникает ситуация, когда при достаточном общем пуле лицензий новые пользователи не могут войти в программу из-за ошибки отсутствия свободных лицензий. При этом администратор завершает неактивные сеансы в консоли администрирования или обрывает терминальные RDP-сессии, но счетчик занятых слотов не уменьшается. Проанализируем причины такого поведения платформы и разберем по шагам действенные способы решения проблемы.

Причина 1. Механизм раздачи лицензий сервером 1С

Разберем фундаментальное отличие в подсчете клиентских лицензий платформой 1С:Предприятие:

  1. Раздача клиентским приложением (через HASP License Manager): клиентский компьютер опрашивает сетевой ключ напрямую. В этом случае один физический компьютер или RDP-сеанс занимает ровно одну лицензию независимо от того, сколько информационных баз или конфигураторов открыто у пользователя.
  2. Раздача сервером 1С:Предприятия: если в свойствах информационной базы включена опция Разрешить выдачу лицензий сервером 1С:Предприятия, подсчет лицензий ведет сам сервер приложений. В этом режиме лицензия захватывается на каждый отдельный сеанс. Если один специалист открыл три базы и четыре окна конфигуратора, сервер спишет из пула семь клиентских лицензий. Кроме того, отдельные лицензии могут потреблять регламентные и фоновые задания.

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

Причина 2. Удержание дескрипторов рабочими процессами и ОС

Рассмотрим, почему после удаления сеанса из консоли кластера лицензия не освобождается мгновенно:

  1. Удержание процессами rphost: при закрытии сеанса рабочий процесс может удерживать соединение с менеджером лицензий до момента завершения внутренней транзакции, освобождения памяти или перезапуска рабочего процесса.
  2. Сетевые тайм-ауты TCP/IP: при аварийном завершении RDP-клиента сетевой стек операционной системы оставляет открытыми сокеты до истечения системных сетевых тайм-аутов Keep-Alive.
  3. Зависание службы HASP Loader: служба сетевого менеджера лицензий при частых переподключениях или некорректных обрывах сокетов может блокировать слоты на USB-ключе, считая их занятыми сервером 1С.

Способ 1. Автоматический ночной перезапуск службы HASP Loader

Для гарантированного сброса «зависших» слотов на сетевом аппаратном ключе HASP на сервере лицензирования рекомендуется настроить периодический перезапуск службы через планировщик задач Windows во внерабочее время.

Посмотрим на пример командного файла (.bat / .cmd), выполняющего безопасный перезапуск службы с фиксацией логов:


echo start: %DATE% %TIME% >> C:\scripts\hasp.log 
sc stop "HASP Loader" >> C:\scripts\hasp.log 
TIMEOUT /T 120 /NOBREAK 
sc start "HASP Loader" >> C:\scripts\hasp.log
echo stop: %DATE% %TIME% >> C:\scripts\hasp.log

Пауза в 120 секунд необходима для корректного освобождения сетевых портов и внутренних ресурсов драйвера HASP перед повторным стартом службы.

Способ 2. Корректировка параметров кластера серверов 1С

Для предотвращения утечек лицензий и зависших сеансов настроим параметры кластера 1С в утилите администрирования:

  1. Время засыпания пассивного сеанса: интервал бездействия пользователя, после которого сеанс перестает нагружать сервер (например, 1200 секунд).
  2. Время завершения спящего сеанса: тайм-аут, после которого спящий сеанс принудительно удаляется сервером, а его лицензия возвращается в общий пул (например, 600 секунд).
  3. Интервал перезапуска рабочих процессов: зададим периодический перезапуск процессов rphost (параметр Интервал перезапуска процессов, например, 86400 секунд). Это обеспечивает плавное обновление пула соединений без прерывания работы пользователей.
  4. Ограничение по объему памяти: укажем Допустимый объем памяти для рабочих процессов, чтобы предотвратить накопление неосвобожденных ресурсов.

Способ 3. Перевод терминальных клиентов на прямое получение лицензий

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

В этом случае клиентские приложения будут запрашивать лицензии у HASP License Manager самостоятельно. В файле nethasp.ini на терминальном сервере укажем точные сетевые параметры:


[NH_COMMON]
NH_TCPIP = Enabled

[NH_TCPIP]
NH_SERVER_ADDR = 192.168.1.100
NH_USE_BROADCAST = Disabled

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

← На главную