Сетевая ошибка Windows Sockets - 10054 (0x00002746): Удаленный хост принудительно разорвал существующее подключение является одним из наиболее распространенных симптомов нестабильной работы кластера серверов 1С:Предприятия. При возникновении этой проблемы пользователи внезапно теряют связь с информационной базой, а в системных журналах фиксируются перезапуски рабочих процессов rphost. Разберем по шагам, почему возникает данный сбой, как правильно локализовать его причину с помощью технологического журнала и какие настройки сервера позволяют полностью устранить падения.
Сама по себе ошибка 10054 со стороны клиентского приложения или фонового задания означает лишь следствие: клиент пытался отправить или получить данные, но сокет был принудительно закрыт сервером. В подавляющем большинстве случаев это происходит из-за того, что рабочий процесс rphost, обслуживавший данное клиентское соединение, аварийно завершил свою работу (упал по критическому исключению в операционной системе).
Проанализируем основные источники сбоев, вызывающих крах процесса rphost:
comcntr.dll в адресном пространстве процесса 1С вызывают необрабатываемые исключения в модулях C++.Для точного определения причин перезапуска процессов rphost настроим сбор технологического журнала с фиксацией аварийных дампов и системных исключений. Создадим в каталоге конфигурации технологического журнала файл logcfg.xml со следующей минимальной конфигурацией:
<config xmlns="http://v8.1c.ru/v8/tech-log">
<dump create="true" location="C:\LOGS\dumps" prntscrn="false" type="0"/>
<log location="C:\LOGS\techlog" history="24">
<event>
<eq property="name" value="EXCP"/>
</event>
<event>
<eq property="name" value="PROC"/>
</event>
<property name="all"/>
</log>
</config>
Параметр type="0" указывает платформе создавать мини-дампы аварийного завершения без включения полных сегментов оперативной памяти. Это предотвращает лавинообразное заполнение дискового пространства дамповыми файлами. По имени файла дампа и последним хронологическим записям события EXCP для соответствующего PID процесса можно выяснить конкретную строку программного кода или системный контекст, вызвавший падение.
Если сервер 1С:Предприятия и СУБД MS SQL Server установлены на одной физической или виртуальной машине, критически важно проверить настройки распределения процессоров СУБД. По умолчанию или при ручной оптимизации администраторы нередко включают опцию повышения приоритета процесса SQL Server, что приводит к деградации и краху процессов 1С.
Выполним правильную настройку сервера баз данных:
MSSQLSERVER.Важно: включенная опция повышения приоритета переводит процесс sqlservr.exe в режим приоритета реального времени (Priority 13), что лишает рабочий процесс rphost процессорного времени при пиковых нагрузках и приводит к разрыву сокетов клиентами.
Когда в конфигурации выполняются регулярные обмены через COM-соединитель (например, универсальная выгрузка/загрузка XML данных), прямой вызов библиотеки comcntr.dll происходит непосредственно внутри адресного пространства rphost. Любое нарушение адресации памяти (Access Violation) или сбой сетевого сокета в сторонней базе мгновенно закрывает весь рабочий процесс 1С вместе со всеми подключенными пользователями.
Для защиты рабочих процессов вынесем COM-соединитель в изолированное серверное приложение COM+:
dcomcnfg).Службы компонентов -> Компьютеры -> Мой компьютер -> Приложения COM+.1C_V8_COM) и укажем тип активации Серверное приложение (Server application).comcntr.dll из каталога bin установленной платформы 1С.После этой настройки все COM-вызовы будут обрабатываться отдельным процессом dllhost.exe. В случае ошибки при обмене завершится только процесс COM-адаптера, а основной процесс rphost и пользовательские сессии продолжат стабильную работу.
При передаче больших объемов данных через распределенные узлы или COM-соединения необходимо пересмотреть логику выгрузки данных и системные параметры сетевого стека:
Неопределено.
netsh int tcp set global chimney=disabled
netsh int tcp set global rss=disabled
HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters установим параметр KeepAliveTime (тип DWORD) равным 300000 (5 минут в миллисекундах).1C:Enterprise Server Agent установим тип запуска Автоматически (отложенный запуск) или настроим зависимость от службы MSSQLSERVER, чтобы исключить утренние сбои при старте кластера до инициализации СУБД.