При работе с кластером серверов 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) или при сбое связи с клиентом.
Рассмотрим, что происходит внутри платформы в момент сбоя:
BackgroundJob).rphost пытается экстренно перепроверить и подтвердить свой лицензионный контекст.C:\ProgramData\1C\licenses\ и последовательно считывает находящиеся там файлы лицензий.rphost с завершением сеансов пользователей.Разберем основные практические шаги по устранению этой проблемы.
Главная причина разрыва соединения — некорректный размер сетевого TDS-пакета при передаче больших объемов данных между 1С и SQL-сервером. По умолчанию в SQL Server используется размер пакета 4 КБ, что при пиковых нагрузках приводит к исчерпанию сетевых буферов.
Для исправления ситуации увеличим размер сетевого пакета:
4096 на 8192 (или до 16384 в сильно нагруженных системах).Чтобы избежать ситуации, когда rphost считывает файл клиентской лицензии вместо серверной при повторной валидации, разнесем их по разным директориям.
C:\ProgramData\1C\licenses\.C:\Program Files\1cv8\8.3.X.X\bin\conf\
C:\ProgramData\1C\licenses\ оставим только файлы клиентских лицензий (на многопользовательский доступ).Благодаря этому при запросе серверного контекста платформа гарантированно подтянет нужную лицензию из своего локального каталога conf.
Если в журналах появляется ошибка WSACancelBlockingCall (Error 10004), это указывает на принудительный сброс сокетов операционной системой Windows из-за дефицита динамических портов или сбоев сетевой карты.
Настроим параметры сетевого стека в реестре Windows на сервере 1С и сервере СУБД:
regedit) и перейдем в ветку:
HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
65534 (расширяет диапазон доступных динамических TCP-портов).30 в десятичной системе (ускоряет освобождение закрытых портов до 30 секунд).
netsh int tcp set global chimney=disabled
netsh int tcp set global rss=disabled
Для предотвращения критического роста нагрузки на rphost и исключения повреждений структур данных выполним профилактические работы:
.dt и обратную загрузку, либо выполним команду DBCC CHECKDB на стороне MS SQL Server для проверки целостности таблиц.Безопасный расход памяти за один вызов) и настроим интервал планового перезапуска процессов rphost, чтобы предотвратить падения из-за утечек памяти.Применяя данные настройки в комплексе, мы устраним первичные причины сетевых сбоев между 1С и SQL Server, исключим ложные срабатывания подсистемы LicenseBaseImpl.cpp и обеспечим стабильную работу серверов.