Как исправить ошибку "Существующее соединение было принудительно закрыто удаленным хостом" (10054) при обновлении конфигурации 1С?

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

При работе с системой 1С:Предприятие, особенно в процессе обновления конфигурации, мы можем столкнуться с различными сложностями. Одной из таких распространенных и, порой, трудно диагностируемых проблем является ошибка с кодом 10054: "An existing connection was forcibly closed by the remote host", что означает "Существующее соединение было принудительно закрыто удаленным хостом". Эта ошибка указывает на неожиданное прерывание сетевого соединения между компонентами 1С, чаще всего между клиентом (или рабочим сервером 1С) и сервером 1С:Предприятия или СУБД.

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

Первичные шаги по устранению проблемы и неудавшихся попытки

Когда мы сталкиваемся с такой ошибкой, важно проанализировать контекст ее возникновения. В нашем случае, ошибка появляется в конце длительного процесса обновления конфигурации (около 20 минут), при этом потребление процессора сначала находится на уровне 15-20%, затем резко подскакивает до почти 100%, и через 30 секунд выдается ошибка. Исходная среда включает ОС Windows Server 2012 R2, платформу 1С:Предприятие 8.3 (8.3.10.2375) и MS SQL 2014, причем сервер 1С и SQL расположены на одной виртуальной машине, исключая прямые проблемы с физической сетью. Обновление запускается непосредственно на сервере.

Рассмотрим, какие шаги были предприняты для решения проблемы, но не принесли желаемого результата:

  1. Очистка кэша на сервере 1С: Были удалены файлы кэша по пути C:\Program Files\1cv8\srvinfo\reg_3541\.... Это стандартная процедура, которая помогает при различных проблемах с некорректными данными кэша, но в данном случае оказалась неэффективной.
  2. Очистка всех активных сессий: Завершение всех пользовательских и фоновых сессий в 1С перед обновлением. Это хороший подход, чтобы избежать блокировок и конфликтов, но не решил проблему.
  3. Очистка журнала транзакций SQL: Процедура обслуживания базы данных SQL, направленная на освобождение места и улучшение производительности. Не помогла.
  4. Перезагрузка сервера: Полная перезагрузка ОС, всех служб 1С и SQL Server. Часто решает временные сбои и "зависшие" процессы, но не в этом случае.
  5. Перестроение индексов и обновление статистики SQL: Эти операции критически важны для производительности СУБД и должны выполняться регулярно. Хотя они не решили проблему, их выполнение перед обновлением является правильной практикой.
  6. Отключение IPv6: В некоторых случаях конфликты между протоколами IPv4 и IPv6 могут вызывать проблемы с сетевыми соединениями. Отключение IPv6 на сетевом адаптере также не принесло результата.
  7. Проверка Windows логов: Системные и прикладные журналы Windows не содержали явных ошибок, указывающих на причину.
  8. Проверка ограничений на кластере 1С: Убедились, что нет явных ограничений, которые могли бы привести к ошибке.

Мы также знаем, что год назад схожая проблема была успешно решена путем изменения параметров рабочего сервера 1С, а именно: Количество ИБ на процесс было изменено с 1 на 8, а Количество соединений на процесс — с 128 на 180. Эти настройки влияют на то, как кластер 1С распределяет нагрузку и использует ресурсы. Хотя тогда это помогло, в текущей ситуации эти изменения уже не дают результата.

Диагностика с использованием технологического журнала 1С

Один из самых мощных инструментов для диагностики проблем на сервере 1С:Предприятия — это технологический журнал. Если он не был включен, как в нашем случае, мы теряем ценнейшую информацию о внутренних процессах, ошибках и взаимодействии компонентов системы. Чтобы включить технологический журнал, нам необходимо создать или отредактировать файл logcfg.xml в каталоге conf кластера серверов 1С (обычно C:\Program Files\1cv8\srvinfo\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="168" maxfile="10000000">
        <event>
            <eq property="Name" value="DBMSSQL"/>
        </event>
        <event>
            <eq property="Name" value="SCALL"/>
        </event>
        <event>
            <eq property="Name" value="EXCP"/>
        </event>
        <event>
            <eq property="Name" value="DUMP"/>
        </event>
        <event>
            <eq property="Name" value="CONN"/>
        </event>
        <event>
            <eq property="Name" value="ADMIN"/>
        </event>
        <event>
            <eq property="Name" value="TDEADLOCK"/>
        </event>
        <event>
            <eq property="Name" value="TLOCK"/>
        </event>
        <event>
            <eq property="Name" value="CALL"/>
        </event>
        <event>
            <eq property="Name" value="SESN"/>
        </event>
        <event>
            <eq property="Name" value="PROC"/>
        </event>
        <event>
            <eq property="Name" value="SRVC"/>
        </event>
        <event>
            <eq property="Name" value="CLSTR"/>
        </event>
    </log>
</config>

В этом примере мы указываем каталог для логов (C:\1C_Logs), глубину хранения (history="168" часов) и максимальный размер файла (maxfile="10000000" байт). После включения технологического журнала и перезапуска службы 1C:Enterprise 8.3 Server Agent, мы сможем анализировать файлы логов, такие как rphost_log (логи рабочего процесса 1С), ragent_log (логи агента сервера) и rmngr_log (логи менеджера кластера). Эти логи могут содержать записи об исключениях (EXCP), ошибках работы с базой данных (DBMSSQL), зависаниях (TDEADLOCK) или принудительном завершении процессов, что крайне важно для понимания причины ошибки 10054.

Основное решение: пересоздание кластера серверов 1С

В отсутствие явных причин, выявленных через стандартные методы диагностики или технологический журнал, иногда приходится прибегать к более радикальным, но часто эффективным методам. Один из таких методов, который был найден и успешно применен в подобной ситуации, заключается в полном пересоздании кластера серверов 1С.

Разберем по шагам, как это было сделано:

  1. Откроем консоль управления сервером 1С: Запустим оснастку "Администрирование серверов 1С:Предприятия".
  2. Создадим новый кластер с другим портом: В консоли создадим абсолютно новый кластер серверов 1С, указав для него порт, отличный от стандартного (например, 2541 вместо 1541). Это гарантирует, что новый кластер будет работать независимо и не будет конфликтовать со старым, а также исключит возможное влияние поврежденных служебных данных старого кластера.
  3. Создадим в этом новом кластере новую информационную базу: В созданном кластере регистрируем новую (пустую) информационную базу.
  4. Восстановим в новую базу копию из рабочей: Используем актуальный архив рабочей базы данных (.dt файл или бэкап SQL) и восстанавливаем его в эту новую, только что зарегистрированную информационную базу внутри нового кластера. Это позволяет нам получить точную копию данных, но в "чистой" инфраструктуре 1С.
  5. Поработаем в этой копии и проверим стабильность: После восстановления, мы должны убедиться, что база данных работает стабильно. В нашем случае это подразумевало попытку выполнения операции обновления конфигурации. Если обновление в новой базе (в новом кластере) проходит успешно, это подтверждает, что проблема не в данных самой конфигурации или базы, а в настройках или состоянии оригинального кластера 1С.
  6. Проблема исчезла: Если обновление завершилось удачно в новом кластере, мы можем считать, что причина была в оригинальном кластере. Далее удаляем временный кластер (2541) и восстанавливаем основной кластер (1541) из резервной копии или пересоздаем его по аналогии, но уже для постоянного использования. В данном случае, было достаточно восстановить базу в оригинальный кластер из архива.

Почему этот метод работает?

Пересоздание кластера и базы данных из архива является своего рода "генеральной уборкой". Это позволяет:

Дополнительные аспекты и возможные причины ошибки "10054"

Помимо рассмотренного решения, существуют и другие глубинные причины возникновения ошибки 10054, которые следует учитывать при ее диагностике.

Проблемы на уровне платформы и кластера 1С

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

  1. Тайм-ауты длительных операций: Процесс обновления конфигурации, особенно для больших и сложных баз, может занимать значительное время. В настройках кластера серверов 1С и даже на уровне платформы могут существовать неявные или явные тайм-ауты, которые прерывают соединение, если операция выходит за установленные рамки. Мы должны рассмотреть возможность увеличения таких тайм-аутов, если они доступны для настройки.
  2. "Зависшие" рабочие процессы (rphost): Рабочий процесс rphost.exe отвечает за выполнение основной логики 1С. В процессе обновления он испытывает значительную нагрузку. Иногда rphost может войти в нестабильное состояние из-за утечек памяти, внутренних ошибок или конфликтов, что приводит к его аварийному завершению операционной системой или менеджером кластера 1С (rmngr). Это и выглядит как разрыв соединения. В таких случаях может помочь ручной перезапуск всех рабочих процессов rphost (или службы 1C:Enterprise 8.3 Server Agent) перед началом обновления.
  3. Повреждение индекса полнотекстового поиска (ППД): Индекс полнотекстового поиска (FTSIndex) может быть поврежден или чрезмерно разрастись. Операции обновления конфигурации часто включают работу с метаданными и данными, что может вызывать повышенное потребление ресурсов процессом rphost.exe, если ему приходится взаимодействовать с поврежденным или неоптимизированным индексом ППД. Это может приводить к аварийным перезапускам rphost. Решением может быть полное перестроение или удаление и создание заново индекса ППД через консоль кластера 1С или встроенные средства 1С.
  4. Некорректные настройки кластера: Некоторые параметры кластера 1С, которые мы можем настроить через консоль администрирования, могут быть неоптимальны для высоких нагрузок. Например, параметры Допустимый объем памяти для рабочего процесса и Интервал перезапуска могут быть настроены слишком агрессивно. Если rphost превышает установленный объем памяти во время обновления (что часто происходит при больших объемах данных и сложной реструктуризации), менеджер кластера принудительно его завершает. Мы должны рассмотреть увеличение Допустимого объема памяти и Интервала перезапуска, а также проверить такие параметры, как Количество ИБ на процесс и Количество соединений на процесс, как было сделано в прошлом случае.

Взаимодействие с Системой Управления Базами Данных (СУБД)

Поскольку 1С использует MS SQL Server, мы должны рассмотреть потенциальные проблемы со стороны СУБД.

  1. Тайм-ауты на стороне SQL Server: MS SQL Server имеет собственные настройки времени ожидания для соединений и выполнения запросов. Если реструктуризация базы данных в процессе обновления 1С занимает больше времени, чем разрешено настройками SQL (например, query timeout или remote query timeout), SQL Server может сам разорвать соединение с сервером 1С. Мы должны проверить и, при необходимости, увеличить эти параметры в настройках SQL Server.
  2. Блокировки и недостаточная производительность СУБД: Обновление конфигурации — это операция, которая создает интенсивную нагрузку на СУБД, выполняя множество операций ALTER TABLE, CREATE INDEX и UPDATE. Наличие длительных блокировок от других сеансов (даже от служебных), недостаточная производительность дисковой подсистемы SQL-сервера (медленные диски) или устаревшая статистика могут значительно замедлить процесс обновления. В результате, процесс 1С может ожидать ответа от SQL дольше, чем предусмотрено внутренними тайм-аутами, что приводит к разрыву соединения. Регулярное обслуживание SQL (обновление статистики, перестроение индексов) и мониторинг блокировок (например, с помощью sp_whoisactive) являются критически важными.

Влияние операционной системы и сетевого окружения

Даже если сервер 1С и СУБД находятся на одной виртуальной машине, проблемы могут возникать на уровне ОС и виртуальной сети.

  1. Проблемы с разрешением имен: Кластер серверов 1С чувствителен к правильному разрешению сетевых имен. Если имя сервера, указанное в настройках кластера или в строке соединения с SQL, некорректно определяется через DNS или файл hosts, это может вызывать задержки или сбои в установлении и поддержании соединения. Мы должны убедиться, что все имена разрешаются корректно и без задержек.
  2. Вмешательство антивирусов и брандмауэров: Антивирусное программное обеспечение, сканирующее в реальном времени файлы баз данных SQL (.mdf, .ldf) или каталоги временных файлов сервера 1С, может существенно замедлить процесс обновления и даже вызвать разрыв соединения из-за чрезмерной задержки или блокировки доступа к файлам. Мы настоятельно рекомендуем добавить критичные для 1С и SQL процессы (rphost.exe, ragent.exe, rmngr.exe, sqlservr.exe) и каталоги (папки баз данных 1С, папки SQL Server, каталоги кэша 1С) в исключения антивирусного ПО. Брандмауэр Windows (или сторонний) также может блокировать порты, используемые 1С (1541, 1560) или SQL (1433), хотя на одной машине это менее вероятно.
  3. Режимы энергосбережения: Настройки энергосбережения операционной системы или гипервизора (если используется виртуальная машина) могут влиять на производительность процессора, дисковой подсистемы и сетевых адаптеров, "притормаживая" систему в моменты высокой нагрузки. Установка плана электропитания на "Высокая производительность" для сервера и отключение энергосберегающих режимов для сетевой карты могут предотвратить "просадки" производительности, которые могут приводить к разрывам соединения из-за тайм-аутов.
  4. Конфликт протоколов IPv4/IPv6: Хотя в нашем случае отключение IPv6 не помогло, в некоторых конфигурациях одновременная работа протоколов IPv4 и IPv6 может вызывать проблемы. Отключение IPv6 на сетевом интерфейсе сервера может служить одним из способов диагностики, если есть подозрения на сетевые проблемы.

Таким образом, хотя проблема ошибки 10054 при обновлении конфигурации может быть вызвана множеством факторов, наиболее радикальное решение, связанное с пересозданием кластера серверов 1С, часто оказывается наиболее эффективным, когда другие методы диагностики и устранения не приносят результата. Важно помнить о комплексном подходе к диагностике, используя все доступные инструменты, включая технологический журнал 1С и логи операционной системы и СУБД.

← На главную