Каждый системный администратор и опытный программист 1С рано или поздно сталкивается с ситуацией, когда пользователи начинают жаловаться на внезапное закрытие программы. Особенно неприятно, когда это происходит посреди рабочего дня, прерывая проведение важных документов или формирование сложных отчетов. В клиент-серверном варианте работы (особенно в связке платформы 1С с СУБД MS SQL Server) виновником такого поведения чаще всего становится системный сбой соединения, известный как Ошибка 10054 (WSAECONNRESET). Физически это означает, что удаленный хост принудительно разорвал существующее подключение.
В этой статье мы подробно разберем природу возникновения данной проблемы, проанализируем неочевидные факторы влияния операционной системы и СУБД, а также по шагам настроим серверное и клиентское оборудование для достижения максимальной стабильности системы.
Когда пользователь работает в 1С:Бухгалтерии, его клиентское приложение (толстый или тонкий клиент) постоянно обменивается пакетами данных с сервером приложений 1С (процессом rphost.exe). Сервер приложений, в свою очередь, транслирует запросы к СУБД MS SQL (процесс sqlservr.exe). Если на любом из этих участков происходит разрыв TCP-соединения, ОС Windows генерирует системное событие WSAECONNRESET с кодом 10054.
Проанализируем основные причины возникновения этой неполадки:
rphost.exe из-за нехватки оперативной памяти или ошибок платформы.SynAttackProtect).Выясним пошагово, как устранить каждую из этих причин.
В большинстве корпоративных сетей адресация по-прежнему строится на протоколе IPv4. Активный протокол IPv6, работающий параллельно, часто вызывает коллизии при разрешении имен хостов (DNS). Платформа 1С может пытаться установить соединение по IPv6, не получать вовремя ответ и аварийно разрывать сессию. Опыт показывает, что отключение IPv6 решает львиную долю сетевых проблем в 1С.
Выполним процедуру отключения протокола на сервере 1С, сервере СУБД и клиентских машинах:
ncpa.cpl в окне запуска (Win + R).Для полной уверенности рекомендуется отключить IPv6 также на уровне системного реестра Windows. Для этого создадим и применим следующий файл реестра:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters]
"DisabledComponents"=dword:ffffffff
После внесения этих изменений в реестр необходимо перезагрузить сервер, чтобы операционная система полностью исключила IPv6 из стека обработки сетевых пакетов.
Если рабочий процесс сервера 1С rphost.exe потребляет слишком много оперативной памяти, операционная система или сам менеджер кластера 1С (rmngr.exe) могут принудительно перезапустить его. В этот момент все пользователи, чьи сессии обслуживались данным процессом, мгновенно получают ошибку соединения 10054.
Настроим параметры кластера 1С для предотвращения подобных ситуаций:
rphost.exe активные пользовательские сеансы будут автоматически перенаправлены на резервный процесс без прерывания работы бухгалтера.Также обратим внимание на лимиты памяти СУБД MS SQL Server. По умолчанию SQL Server забирает под свои нужды всю доступную оперативную память сервера. Это приводит к деградации процессов 1С. Ограничим аппетиты СУБД: откроем SQL Server Management Studio (SSMS), зайдем в свойства сервера на вкладку «Память» (Memory) и жестко зададим параметр «Максимальный размер памяти сервера» (Max Server Memory), оставив операционной системе и процессам 1С как минимум 4–8 ГБ свободного объема.
Операционная система Windows Server имеет встроенные алгоритмы защиты от сетевых атак, которые при высокой интенсивности обмена данными между 1С и базой данных SQL могут ложно принимать легитимные транзакции за вредоносную активность. Отрегулируем параметры TCP-соединений в реестре.
Откроем редактор реестра regedit и перейдем по пути:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
Создадим или отредактируем следующие параметры типа DWORD (32 бита):
300000 (5 минут в шестнадцатеричной системе счисления это 493e0), чтобы система чаще подтверждала активность сессии.1000 (1 секунда, в шестнадцатеричной системе — 3e8).0 (отключено).Для удобства вы можете импортировать эти настройки с помощью готового конфигурационного файла:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]
"KeepAliveTime"=dword:000493e0
"KeepAliveInterval"=dword:000003e8
"SynAttackProtect"=dword:00000000
В тех случаях, когда сервер приложений 1С и СУБД MS SQL Server физически установлены на одном и том же компьютере (как это часто бывает, когда с базой работает небольшое количество пользователей), мы можем полностью исключить сетевой стек из цепочки обмена данными.
Протокол Shared Memory позволяет процессам 1С и SQL обмениваться информацией напрямую через оперативную память сервера, минуя сетевые адаптеры, сокеты и петлевой интерфейс (localhost). Это не только повышает скорость работы на 10-15%, но и раз и навсегда избавляет от сетевых ошибок класса 10054 на уровне «1С — SQL».
Разберем, как настроить данный протокол по шагам:
SQL Server Network Configuration -> Protocols for MSSQLSERVER (или имя вашего экземпляра).lpc:ИмяСервера (где lpc расшифровывается как Local Procedure Call).Иногда корень проблемы кроется в аппаратной части клиентского компьютера. Если бухгалтер отлучился на обед или долго изучает распечатанный документ, сетевая карта компьютера может снизить энергопотребление или временно перейти в спящий режим. При попытке возобновить работу сессия в 1С оказывается прерванной сервером по тайм-ауту.
Выполним профилактику сетевого оборудования на клиентской машине:
Green Ethernet, Energy Efficient Ethernet, а также отключим разгрузку протоколов (IPv4 Checksum Offload, Large Send Offload), переложив эти задачи обратно на центральный процессор для более надежного контроля целостности пакетов.На стороне сервера также полезно отключить оптимизации разгрузки TCP. Для этого выполним в командной строке (запущенной от имени администратора) следующие директивы:
netsh int ip set global taskoffload=disabled
netsh int tcp set global chimney=disabled
netsh int tcp set global autotuninglevel=disabled
Современные антивирусные комплексы и брандмауэры осуществляют глубокое сканирование трафика в реальном времени. Если транзакция 1С длится дольше обычного (например, закрытие месяца в 1С:Бухгалтерии), антивирусный экран может расценить эту активность как подозрительную и заблокировать порт.
Для предотвращения ложных блокировок добавим в доверенную зону антивируса и правила брандмауэра следующие исполняемые файлы:
ragent.exe, rmngr.exe, rphost.exe — исполняемые файлы сервера 1С.1cv8.exe, 1cv8c.exe — исполняемые файлы тонкого и толстого клиентов на рабочих станциях.sqlservr.exe — исполняемый файл СУБД MS SQL.Также рекомендуется добавить в список исключений сканирования каталоги временных файлов пользователей (%userprofile%\AppData\Local\1C и %userprofile%\AppData\Roaming\1C), где хранится кэш метаданных, повреждение которого также может спровоцировать сбой сессии.
Мы детально проанализировали причины возникновения ошибки 10054 при работе в 1С:Бухгалтерии и рассмотрели комплекс методов борьбы с ней. Системный подход к администрированию инфраструктуры 1С — от отключения неиспользуемого протокола IPv6 до тонкой настройки реестра Windows и перевода СУБД на работу через Shared Memory — позволяет полностью локализовать и устранить эти досадные сбои. Применив данные рекомендации, вы обеспечите бесперебойную работу пользователей и надежную сохранность обрабатываемых учетных данных.