Как исправить ошибку программного лицензирования LicenseBaseImpl.cpp и самопроизвольное завершение рабочих процессов на сервере 1С?

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

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

Descr='src\LicenseBaseImpl.cpp(3908):0874860b-2b41-45e1-bc2b-6e186eb37771: Ошибка программного лицензирования. Файл программной лицензии не предусматривает возможность запуска сервера 1С:Предприятия'

На первый взгляд ошибка указывает на проблемы с файлами лицензий .lic, однако повторное получение лицензий или их переустановка обычно не даёт результатов. Проанализируем механику возникновения данной ошибки и разберем по шагам комплекс проверенных решений.

Скрытый механизм возникновения ошибки

Исключение в модуле LicenseBaseImpl.cpp с кодом 0874860b-2b41-45e1-bc2b-6e186eb37771 в большинстве случаев является **вторичной фасадной ошибкой**. Оболочка платформы 1С генерирует его при разрыве сетевого соединения сокета между рабочим процессом rphost и СУБД (Microsoft SQL Server) или при сбое связи с клиентом.

Рассмотрим, что происходит внутри платформы в момент сбоя:

  1. Происходит кратковременный сетевой сбой, обрыв TCP-соединения или превышение таймаута при выполнении фонового задания (BackgroundJob).
  2. Рабочий процесс rphost пытается экстренно перепроверить и подтвердить свой лицензионный контекст.
  3. Сервер 1С сканирует каталог C:\ProgramData\1C\licenses\ и последовательно считывает находящиеся там файлы лицензий.
  4. Если первым в каталоге считывается файл **клиентской** лицензии (на 100 или 300 пользователей), а не лицензии на сервер, подсистема лицензирования ошибочно трактует этот файл как основной серверный и выдаёт сообщение: «Файл программной лицензии не предусматривает возможность запуска сервера».
  5. После этого происходит аварийное падение рабочего процесса rphost с завершением сеансов пользователей.

Разберем основные практические шаги по устранению этой проблемы.

Шаг 1. Оптимизация размера TDS-пакета на стороне MS SQL Server

Главная причина разрыва соединения — некорректный размер сетевого TDS-пакета при передаче больших объемов данных между 1С и SQL-сервером. По умолчанию в SQL Server используется размер пакета 4 КБ, что при пиковых нагрузках приводит к исчерпанию сетевых буферов.

Для исправления ситуации увеличим размер сетевого пакета:

  1. Откроем SQL Server Management Studio (SSMS) и подключимся к экземпляру СУБД.
  2. Нажмем правой кнопкой мыши на имя сервера и выберем Свойства (Properties).
  3. Перейдем в раздел Адаптеры сети (Advanced) или Подключения (Connections).
  4. Найдем параметр Размер сетевого пакета (Network Packet Size).
  5. Изменим значение по умолчанию с 4096 на 8192 (или до 16384 в сильно нагруженных системах).
  6. Применим настройки и перезапустим службу SQL Server.

Шаг 2. Разделение каталогов хранения клиентских и серверных лицензий

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

  1. Перейдем в общий каталог лицензий C:\ProgramData\1C\licenses\.
  2. Определим файл, отвечающий за программную лицензию на **сервер 1С**.
  3. Перенесём файл серверной лицензии непосредственно в рабочий каталог конкретной версии платформы:

    C:\Program Files\1cv8\8.3.X.X\bin\conf\

  4. В общем каталоге C:\ProgramData\1C\licenses\ оставим только файлы клиентских лицензий (на многопользовательский доступ).

Благодаря этому при запросе серверного контекста платформа гарантированно подтянет нужную лицензию из своего локального каталога conf.

Шаг 3. Тюнинг сетевого стека TCP/IP и устранение блокировок Windows Sockets

Если в журналах появляется ошибка WSACancelBlockingCall (Error 10004), это указывает на принудительный сброс сокетов операционной системой Windows из-за дефицита динамических портов или сбоев сетевой карты.

Настроим параметры сетевого стека в реестре Windows на сервере 1С и сервере СУБД:

  1. Откроем редактор реестра (regedit) и перейдем в ветку:

    HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

  2. Создадим или изменим следующие параметры DWORD (32 бита):
    • MaxUserPort — значение 65534 (расширяет диапазон доступных динамических TCP-портов).
    • TcpTimedWaitDelay — значение 30 в десятичной системе (ускоряет освобождение закрытых портов до 30 секунд).
  3. Отключим аппаратные оптимизации сетевых адаптеров, которые могут сбрасывать неактивные соединения. Выполним в командной строке от имени администратора:
    
    netsh int tcp set global chimney=disabled
    netsh int tcp set global rss=disabled
    

Шаг 4. Обслуживание баз данных и оптимизация кластера 1С

Для предотвращения критического роста нагрузки на rphost и исключения повреждений структур данных выполним профилактические работы:

  1. Запрет фоновых заданий: В нерабочих и тестовых информационных базах отключим автозапуск фоновых и регламентных заданий через консоль администрирования кластера 1С.
  2. Обслуживание индексов полнотекстового поиска: Выполним очистку и полное перезаполнение индекса полнотекстового поиска (ППД) в проблемных базах через программный интерфейс или меню настройки платформы.
  3. Тестирование и исправление: Проведем процедуру выгрузки информационной базы в файл .dt и обратную загрузку, либо выполним команду DBCC CHECKDB на стороне MS SQL Server для проверки целостности таблиц.
  4. Настройка рабочих процессов: В свойствах кластера 1С зададим ограничение расхода памяти на рабочий процесс (параметр Безопасный расход памяти за один вызов) и настроим интервал планового перезапуска процессов rphost, чтобы предотвратить падения из-за утечек памяти.

Применяя данные настройки в комплексе, мы устраним первичные причины сетевых сбоев между 1С и SQL Server, исключим ложные срабатывания подсистемы LicenseBaseImpl.cpp и обеспечим стабильную работу серверов.

← На главную