Как устранить падение rphost.exe с ошибкой 0xc0000005 при работе с системой лицензирования СЛК/Катран

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

Администраторы средних и крупных информационных систем на базе «1С:Предприятие 8» нередко сталкиваются с внезапными падениями рабочих процессов сервера. Одной из наиболее сложных в диагностике проблем является регулярное аварийное завершение процесса rphost.exe с кодом исключения 0xc0000005 (ошибка нарушения прав доступа к памяти или Access Violation). В этой статье мы подробно разберем реальный практический кейс, когда рабочий процесс падал каждые 2–5 минут, выясним первопричину сбоя, связанную с защитой СЛК/Катран, а также рассмотрим комплексные методы борьбы с этой проблемой.

Симптоматика проблемы и первые шаги диагностики

В рассматриваемой ситуации на сервере приложений 1С (платформа версии 8.3.12.1790, хотя проблема актуальна и для современных релизов) наблюдались постоянные падения процессов rphost.exe. Пользователи при этом периодически получали сообщения о разрыве соединения с базой данных («Удаленный хост принудительно разорвал существующее подключение»).

Для начала проанализируем системный журнал событий Windows (Event Viewer). В нем фиксировались следующие критические ошибки:

Код исключения 0xc0000005 однозначно указывает на попытку выполнения недопустимой операции с памятью — процесс попытался прочитать или записать данные по адресу, к которому у него нет доступа. Тот факт, что в качестве сбойного модуля указан unknown или динамически создаваемый файл во временном каталоге, наводит на мысль о влиянии внешних динамических библиотек (DLL), которые подгружаются в адресное пространство процесса rphost.exe во время его работы.

Шаг 1. Сопоставление системных логов и Технологического журнала 1С

Для точной локализации проблемы нам необходимо сопоставить системную ошибку с логами платформы «1С:Предприятие». Переведем шестнадцатеричный идентификатор процесса 0x1558 из журнала событий Windows в десятичный формат. Сделать это можно с помощью обычного калькулятора программиста: значение 0x1558 равно десятичному числу 4292. Это PID (Process ID) упавшего процесса rphost.exe.

Теперь обратимся к Технологическому журналу (ТЖ) 1С. Для того чтобы ТЖ собирал сведения об аварийных завершениях и сетевых ошибках, файл конфигурации logcfg.xml должен содержать следующие настройки для сбора исключений:


<config xmlns="http://v8.1c.ru/v8/tech-log">
    <log location="C:\v8_logs\excp" history="72">
        <event>
            <eq property="Name" value="EXCP"/>
        </event>
        <event>
            <eq property="Name" value="EXCPCNTX"/>
        </event>
        <property name="all"/>
    </log>
</config>

Проанализировав логи ТЖ для процесса с PID 4292 непосредственно перед моментом падения, мы обнаружим критическое событие:


11:18.204056-0,EXCP,0,process=rphost,OSThread=10232,ClientID=12,
Exception=NetDataExchangeException,Descr='server_addr=(2)10.10.5.46:51055 
descr=10054(0x00002746): Удаленный хост принудительно разорвал существующее подключение. 
line=1149 file=src\DataExchangeServerImpl.cpp'

Здесь зафиксирована сетевая ошибка 10054 (WSAECONNRESET). Это означает, что удаленный сервер (или служба) принудительно разорвал установленное TCP-соединение с процессом rphost.exe. Выясним, почему обычный разрыв соединения приводит к краху всего рабочего процесса 1С.

Шаг 2. Разбор механизма сбоя внешней компоненты СЛК (Катран)

Виновником сбоя является конфликт платформы с компонентами Системы лицензирования конфигураций (СЛК), разработанной компанией «Катран Софт». Эта защита активно используется во многих отраслевых решениях 1С (например, «1С:Бухгалтерия сельскохозяйственного предприятия», «1С:Общепит» и др.).

Механизм работы СЛК устроен следующим образом:

  1. При обращении к защищенным объектам конфигурации платформа 1С загружает специальную внешнюю компоненту защиты.
  2. Эта компонента представляет собой динамическую библиотеку DLL, которая распаковывается во временную папку службы 1С (каталог Temp в профиле пользователя usr1cv8) под случайным именем вида v8_XXXX_XX.tmp.
  3. Библиотека загружается непосредственно внутрь адресного пространства процесса rphost.exe.
  4. Компонента защиты регулярно отправляет сетевые запросы на выделенный сервер лицензирования СЛК (в нашем примере это адрес 10.10.5.46) для подтверждения активности сеанса и проверки ключей.

Если в локальной сети происходят микросбои или сервер СЛК неожиданно закрывает сокет, внешняя компонента защиты фиксирует сетевую ошибку 10054. В устаревших версиях СЛК обработка этого сетевого исключения была реализована с ошибками. Вместо того чтобы мягко вернуть ошибку в код 1С, библиотека защиты совершала некорректное обращение к памяти (например, пыталась обратиться к уже уничтоженному объекту сокета), что вызывало системное исключение 0xc0000005. Поскольку библиотека была запущена внутри rphost.exe, операционная система завершала весь рабочий процесс 1С целиком, выбрасывая из базы десятки работающих пользователей.

Шаг 3. Локализация и быстрое временное решение

Выясним, какое именно событие инициирует обращение к серверу СЛК каждые 2–5 минут. Как правило, это специализированное фоновое регламентное задание проверки лицензий, встроенное в отраслевую конфигурацию.

Рассмотрим по шагам быстрый способ локализации и временного купирования проблемы:

  1. Определим, какие именно базы в кластере используют защиту СЛК. В нашем случае это было около 10 баз «Бухгалтерия сельскохозяйственного предприятия» (БСХП) из общего пула в 80 баз.
  2. Через консоль администрирования или непосредственно в режиме «1С:Предприятие» перейдем в список регламентных заданий этих отраслевых баз.
  3. Найдем регламентное задание, отвечающее за циклическую проверку лицензий (оно может называться ПроверкаЛицензииСеанса, ПроверкаЗащиты или аналогично).
  4. Отключим данное регламентное задание.

Важно понимать последствия отключения регламентного задания:
Первичная проверка лицензии происходит при запуске сеанса пользователя. Отключение фонового регламентного задания позволит пользователям успешно заходить в программу и работать. Однако фоновое подтверждение лицензии прекратится. В краткосрочной перспективе это решает проблему падений rphost.exe. Но в долгосрочной перспективе на сервере СЛК могут «зависать» лицензии пользователей, чьи сеансы завершились некорректно. Также некоторые конфигурации при длительном отсутствии фонового подтверждения могут выводить предупреждения и принудительно завершаться.

Шаг 4. Системные и правильные способы решения

Для того чтобы полностью исключить падения сервера и обеспечить стабильную работу пользователей без отключения регламентных задач, необходимо применить комплекс мер по системной настройке.

1. Настройка изоляции процессов в кластере 1С

По умолчанию в кластере 1С на одном процессе rphost.exe могут обслуживаться десятки различных информационных баз. Если в одной из баз происходит сбой внешней компоненты СЛК, падает весь процесс, закрывая сеансы пользователей совершенно других баз (например, «Зарплата и управление персоналом» или «Бухгалтерия предприятия»).

Чтобы изолировать проблемные базы, выполним следующие настройки в консоли администрирования кластера 1С:

  1. Откроем свойства рабочего сервера.
  2. Установим параметр «Количество ИБ на процесс» равным 1. Это заставит систему создавать под каждую базу свой индивидуальный процесс rphost.exe.
  3. Параметр «Количество соединений на процесс» рекомендуется уменьшить до разумного минимума (например, от 15 до 25 соединений), чтобы ограничить объем оперативной памяти, потребляемый каждым процессом.
  4. Настроим «Требования назначения функциональности». Мы можем выделить отдельный рабочий сервер в кластере или отдельный процесс специально для обслуживания отраслевых баз с защитой СЛК.

При такой схеме, даже если внешняя компонента СЛК вызовет падение процесса, аварийно завершится только конкретный rphost.exe, обслуживающий базу БСХП. Пользователи остальных 70 баз продолжат работать без каких-либо прерываний.

2. Обновление сервера СЛК и файлов защиты

Разработчики системы защиты Катран регулярно выпускают обновления, исправляющие утечки памяти и некорректную обработку сетевых ошибок (включая ошибку 10054). Рекомендуется выполнить следующие действия:

3. Настройка разрешений брандмауэра и антивируса

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

  1. Добавим порты СЛК (по умолчанию это 9099 для СЛК 3.x, либо 9091/15201 для более старых версий) в правила исключений брандмауэра Windows (как для входящих, так и для исходящих подключений).
  2. В настройках локального антивирусного ПО на серверах исключим проверку сетевого трафика по данным портам. Глубокое сканирование сетевых пакетов (DPI) часто вызывает задержки, которые СЛК интерпретирует как обрыв связи.

4. Проверка прав на временные каталоги

Убедимся, что у пользователя операционной системы, под которым функционирует служба сервера 1С (обычно это usr1cv8 или локальная система SYSTEM), есть полные права доступа на чтение, запись и изменение системных временных каталогов:

Если у процесса 1С ограничены права на перезапись или исполнение временных файлов v8_*.tmp, это неизбежно приведет к ошибке доступа к памяти 0xc0000005 при попытке обращения к компоненте защиты СЛК.

← На главную