При работе с хранилищем конфигурации 1С:Предприятие разработчики периодически сталкиваются с неприятным сбоем. В процессе загрузки конфигурации или получения истории изменений процесс доходит до 100%, после чего прерывается критическим сообщением: «Неклассифицированная ошибка работы с хранилищем конфигурации. Ошибка при выполнении запроса POST к ресурсу... descr=10054(0x00002746): Удаленный хост принудительно разорвал существующее подключение». Эта ошибка регистрируется в модуле DataExchangeTcpClientImpl.cpp.
Данный сбой (код ошибки 10054 в сокетах Windows означает WSAECONNRESET) указывает на то, что удаленная сторона (сервер хранилища или веб-сервер) принудительно закрыла сетевое TCP-соединение с клиентом. Разберем подробно основные причины этой проблемы и пошагово рассмотрим способы их решения.
Наиболее распространенной причиной разрыва соединения является банальный дефицит оперативной памяти на сервере, где развернуто хранилище. Важно понимать разницу: речь идет не о свободном дисковом пространстве (HDD/SSD), а именно о RAM. Когда клиент запрашивает тяжелую конфигурацию (особенно ERP, УХ или КА), серверный процесс пытается считать данные из базы хранилища и полностью поместить их в оперативную память для отправки клиенту. Если свободная память на сервере исчерпана, операционная система принудительно завершает процесс хранилища, что приводит к обрыву сетевой сессии.
Для решения этой проблемы выполним следующие действия:
1cstora.corp.tanet.ru в момент загрузки конфигурации и проанализируем потребление RAM.Если служба хранилища crserver.exe или рабочий процесс сервера 1С rphost.exe работают под управлением 32-битной версии платформы 1С:Предприятие, они имеют жесткое аппаратное ограничение на использование оперативной памяти. Один такой процесс не может адресовать более 2 ГБ (в редких случаях при специальной настройке ОС — до 3 ГБ) оперативной памяти.
При обработке тяжелых файлов конфигурации этот лимит превышается практически мгновенно. Процесс аварийно завершается с ошибкой переполнения памяти (Out of memory), а клиент получает ошибку 10054. Решением в данном случае является полный переход на 64-разрядную версию платформы 1С как на сервере приложений, так и на сервере хранилища конфигурации.
Если хранилище опубликовано через специальную службу сервера хранилища crserver.exe, падение этой службы также мгновенно прерывает все активные сессии клиентов. Проанализируем системные журналы для диагностики этого поведения:
crserver.exe.Если служба регулярно падает из-за внутренних ошибок платформы, рекомендуется обновить версию платформы 1С на сервере хранилища до актуального стабильного релиза. При возникновении несовместимости версий можно использовать способ работы с хранилищем из другой версии конфигуратора.
В некоторых сетевых инфраструктурах Windows пытается транслировать сетевые пакеты через протокол IPv6, работа которого может быть настроена некорректно. Это приводит к периодическим отказам сетевых сокетов и сбросу TCP-соединений.
Чтобы исключить эту проблему, полностью отключим протокол IPv6 на сервере хранилища и рабочем сервере 1С через реестр Windows:
regedit от имени администратора.HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\TCPIP6\Parameters.DisabledComponents.ffffffff (в шестнадцатеричной системе счисления).Если ваше хранилище конфигурации опубликовано через веб-сервер по протоколам HTTP или HTTPS, то передача больших объемов данных может прерываться из-за настроек таймаутов веб-сервера. Веб-сервер закрывает сессию, посчитав ее зависшей.
Для исправления ситуации выполним корректировку настроек:
httpd.conf, найдем параметры Timeout и KeepAliveTimeout и увеличим их значения до 300–600 секунд. Также проверим параметр LimitRequestBody, который может принудительно ограничивать размер передаваемых POST-запросов.maxAllowedContentLength, увеличив его значение, чтобы веб-сервер не блокировал загрузку больших файлов конфигурации.В настройках кластера серверов 1С в консоли администрирования могут быть заданы параметры ограничения потребления ресурсов. Например, свойства «Максимальный объем памяти рабочих процессов» или «Предельный объем памяти запроса». При их превышении менеджер кластера 1С принудительно перезапускает рабочий процесс rphost.exe, обслуживающий ваш Конфигуратор. Это действие приводит к разрыву соединения с хранилищем.
Временно увеличим эти лимиты или установим их в значение «0» (без ограничений) в свойствах рабочего сервера через утилиту администрирования кластера серверов 1С, после чего повторим загрузку конфигурации.
Иногда физическая целостность файлов самого хранилища (базы данных 1Cv8.crcd) нарушается из-за некорректного завершения работы или аппаратных сбоев. При попытке прочитать поврежденный шаг истории сервер падает, обрывая TCP-сессию.
Выполним исправление хранилища по шагам:
Если вышеперечисленные методы не помогли локализовать сбой, настроим сбор подробных логов технологического журнала на сервере хранилища. Для этого в каталоге 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:\v8_logs" history="24">
<event>
<eq property="Name" value="EXCP"/>
</event>
<event>
<eq property="Name" value="ERR"/>
</event>
<property name="all"/>
</log>
</config>
После создания файла воспроизведем ошибку загрузки конфигурации. Лог-файлы ТЖ будут сохранены в каталоге C:\v8_logs. Откроем их и проанализируем события перед разрывом соединения — там будет содержаться детальное описание системной ошибки, вызвавшей аварийное завершение процесса.