Каждый администратор или разработчик 1С рано или поздно сталкивается с ситуацией, когда длительный ночной процесс (например, восстановление последовательности документов, закрытие месяца или резервное копирование) прерывается неприятной системной ошибкой. В логах или на экране пользователя появляется сообщение: «Ошибка обращения к серверу 1С:Предприятия. по причине: server_addr=tcp://serv-1cv8:1563 descr=Ошибка сетевого доступа к серверу (Windows Sockets - 10054(0x00002746)...». Для регулярного выполнения таких задач настраивают автоматическое архивирование и тестирование баз в тихом режиме.
В этой статье мы подробно разберем, почему возникает эта ошибка, проанализируем физику процесса на уровне сетевых протоколов и операционной системы, а также рассмотрим пошаговые инструкции по ее устранению.
С технической точки зрения код ошибки 10054 (WSAECONNRESET) означает, что существующее TCP-соединение было мгновенно разорвано удаленной стороной без прохождения стандартной процедуры закрытия сессии (FIN-пакетов). Вместо этого инициатор разрыва присылает пакет с флагом RST (Reset). Это указывает на то, что удаленный узел «забыл» про данное соединение, его процесс аварийно завершился, либо промежуточное сетевое оборудование принудительно заблокировало трафик.
Выясним основные причины этой проблемы и разберем методы их решения шаг за шагом.
---
Очень часто во время выполнения ресурсоемких задач локальный DNS-сервер сети может испытывать кратковременные перегрузки или уходить на техническое обслуживание. Если клиентский компьютер на долю секунды теряет связь с DNS-сервером и не может разрешить сетевое имя сервера 1С (например, serv-1cv8), сессия немедленно сбрасывается.
Проанализируем простейший способ исключить влияние DNS из цепочки авторизации:
C:\Windows\System32\drivers\etc.hosts с помощью любого текстового редактора (обязательно с правами администратора).
# Пример записи в файле hosts для жесткого сопоставления имени сервера 1С
192.168.1.100 serv-1cv8
Сохраним файл. Теперь операционная система будет обращаться к серверу напрямую по IP-адресу, минуя запросы к DNS-серверу, что исключит сетевые задержки и сбои разрешения имен.
---
Если ошибка стабильно воспроизводится в ночное время, велика вероятность, что один из узлов сетевой инфраструктуры банально «засыпает». При отсутствии пользовательской активности (движений мыши, нажатий клавиш) операционная система клиента или настройки сетевой карты сервера могут переходить в режим пониженного энергопотребления.
Разберем, как отключить данную опцию на уровне сетевого адаптера:
devmgmt.msc через меню «Выполнить»).Также настоятельно рекомендуем проверить настройки электропитания в панели управления Windows на сервере и клиенте. Установим схему «Высокая производительность» и запретим переход компьютера в спящий режим.
---
В консоли администрирования кластера 1С:Предприятия по умолчанию включены механизмы автоматического контроля стабильности. Если у вас настроен принудительный циклический перезапуск рабочих процессов rphost (по времени или по достижении лимита памяти), то принудительное завершение процесса разорвет все активные сессии.
Если в этот момент выполнялась долгая транзакция восстановления последовательности, то падение или штатный перезапуск процесса rphost вызовет у клиента ошибку 10054.
Рассмотрим, как правильно настроить параметры кластера:
---
Операционные системы Windows по умолчанию отдают приоритет протоколу IPv6 перед IPv4. Если ваша локальная сеть построена исключительно на IPv4, попытки службы сервера 1С установить связь по IPv6 с последующим таймаутом могут приводить к сбросу сетевого сокета.
Для надежного отключения IPv6 проделаем следующие шаги в реестре сервера:
regedit.HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\TCPIP6\Parameters.DisabledComponents.0xffffffff.---
При выполнении тяжелых групповых обработок документов интенсивность сетевых пакетов между сервером СУБД, сервером 1С и клиентом возрастает лавинообразно. Windows Server может классифицировать этот легитимный всплеск трафика как вредоносную атаку класса SYN-flood и заблокировать порт.
Чтобы избежать этого, мы можем отключить встроенный алгоритм защиты SynAttackProtect:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters.SynAttackProtect (тип DWORD).0.---
Если между клиентом и сервером установлено активное сетевое оборудование (маршрутизаторы, шлюзы, аппаратные брандмауэры), они могут разрывать транзитные сессии, которые долгое время кажутся им неактивными. Во время долгого расчета на сервере клиентский компьютер просто «ждет» ответа и не отправляет пакеты, что побуждает сетевое оборудование разорвать «зависшее» соединение.
Мы можем заставить операционную систему чаще отправлять пакеты поддержания активности (Keep-Alive):
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters создадим три параметра типа DWORD:
KeepAliveTime — установим значение 300000 (время ожидания в миллисекундах перед началом отправки keep-alive пакетов — 5 минут).KeepAliveInterval — установим значение 1000 (интервал между повторными отправками — 1 секунда).TcpMaxDataRetransmissions — установим значение 5 (количество попыток повторной передачи пакета).---
Если все предыдущие сетевые настройки выполнены, но ошибка 10054 продолжает появляться, проблема может крыться в программном сбое платформы 1С:Предприятие (например, утечка памяти в конкретном запросе или баг релиза платформы, приводящий к критическому завершению процесса rphost).
Для точной диагностики настроим Технологический журнал 1С. Создадим в каталоге настроек платформы (по умолчанию C:\Program Files\1cv8\conf) файл с именем logcfg.xml следующего содержания:
<?xml version="1.0" encoding="UTF-8"?>
<config xmlns="http://v8.1c.ru/v8/tech-log">
<log location="C:\1C_Logs" history="12">
<event>
<eq property="Name" value="EXCP"/>
</event>
<event>
<eq property="Name" value="PROC"/>
</event>
<property name="all"/>
</log>
</config>
После этого воспроизведем ошибку или дождемся ее появления ночью. Проанализируем файлы логов в папке C:\1C_Logs. Если перед моментом сетевого сбоя зафиксировано событие EXCP (исключительное событие) или процесс rphost внезапно завершил свою работу (событие PROC со значением завершения процесса), то корень проблемы лежит в коде конфигурации или платформе 1С. В таком случае поможет обновление платформы 1С до актуального стабильного релиза. Для упрощения анализа собранных логов можно использовать внешний отчет для разбора ошибок технологического журнала.
Проанализировав все указанные причины и последовательно применив описанные решения, мы сможем полностью избавить нашу систему от критических вылетов по сетевой ошибке 10054 и обеспечить стабильное выполнение долгих регламентных операций в 1С:Предприятии. Для решения сопутствующих системных задач можно воспользоваться справкой по администрированию операционных систем и серверов 1С.