MSSQL Error 28005: An existing connection was forcibly closed by remote host — Решение
- Ошибка в журнале SQL Server или приложения:
Error: 28005, Severity: 16, State: 1. An existing connection was forcibly closed by the remote host. - В журнале регистрации 1С:
Ошибка СУБД: Соединение с сервером баз данных разорвано (WSAECONNRESET). - Внезапное завершение длительных отчетов и пакетных обработок 1С.
- Сетевой сброс сессий TCP (флаг TCP RST) со стороны ОС или аппаратного фаервола.
1. Настройка параметров TCP Keep-Alive в реестре Windows
Межсетевые экраны и NAT-маршрутизаторы часто сбрасывают неактивные TCP-соединения через 5–15 минут простоя. Настройте отправку Keep-Alive пакетов каждые 60 секунд на сервере 1С и сервере СУБД:
# Настройка таймаута TCP KeepAlive (60 000 мс = 1 минута)
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" -Name "KeepAliveTime" -Value 60000 -Type DWord
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" -Name "KeepAliveInterval" -Value 1000 -Type DWord2. Проверка настроек TCP Chimney и SynAttackProtect
# Отключение устаревших механизмов разгрузки TCP в Windows Server
netsh int tcp set global chimney=disabled
netsh int tcp set global rss=enabled
netsh int tcp set global netdma=disabled3. Мониторинг разрывов соединений через Extended Events
CREATE EVENT SESSION [Track_Disconnects] ON SERVER
ADD EVENT sqlserver.connectivity_ring_buffer_recorded,
ADD EVENT sqlserver.error_reported(
ACTION(sqlserver.client_app_name, sqlserver.client_hostname, sqlserver.session_id)
WHERE ([error_number]=(28005) OR [error_number]=(17836))
)
ADD TARGET package0.ring_buffer;
GO
ALTER EVENT SESSION [Track_Disconnects] ON SERVER STATE = START;4. Настройка времени жизни соединений в кластере 1С
В свойствах информационной базы 1С через консоль кластера серверов установите параметр Время засыпания пассивных сеансов и Время завершения спящих сеансов во избежание накопления «мертвых» сокетов.
Частые вопросы (FAQ)
Кто инициирует сброс соединения при ошибке 28005 (WSAECONNRESET)?
Сброс (пакет TCP RST) отправляется удаленным хостом (сервером приложений 1С), операционной системой или промежуточным фаерволом, если хост считает сессию закрытой по таймауту.
Помогает ли увеличение KeepAliveTime решить проблему?
Напротив, параметр KeepAliveTime необходимо уменьшать (например, с 2 часов по умолчанию до 1–2 минут), чтобы сетевые пакеты поддержания связи не позволяли фаерволу закрывать сессию.
Может ли падение процесса rphost вызывать 28005 в SQL Server?
Да, если рабочий процесс rphost аварийно падает (например, по переполнению памяти), операционная система сервера 1С немедленно отправляет TCP RST серверу SQL Server.
Требуется ли перезагрузка после изменения KeepAliveTime в реестре?
Да, изменения в ветке HKLM:\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters вступают в силу только после перезагрузки операционной системы.