При администрировании клиент-серверной архитектуры 1С:Предприятие 8.3 администраторы нередко сталкиваются с ситуацией, когда число рабочих процессов rphost непрерывно растет, достигает отметки в 32 штуки и переходит в неактивное состояние. После этого пользователи теряют доступ к базе, а в журнале или на клиентах появляется сообщение: server_addr=tcp://srv-1c:1571 descr=Ошибка сетевого доступа к серверу (Windows Sockets — 10054(0x00002746). Удаленный хост принудительно разорвал существующее подключение.). Проанализируем природу этой неисправности и разберем по шагам действенные методы ее устранения.
Выясним причину такого поведения. По умолчанию для рабочих процессов кластера серверов 1С выделяется фиксированный диапазон сетевых IP-портов: 1560:1591, что составляет ровно 32 доступных порта. Если процесс выключается (например, по расписанию перезапуска), но операционная система или сам процесс не могут корректно освободить занятый сокет, он зависает в памяти. Когда число таких процессов достигает предела в 32 штуки, менеджер кластера rmngr не может запустить новый рабочий процесс или выделить порт под новое подключение, что приводит к исчерпанию сетевых дескрипторов и аварийному разрыву сессий по ошибке 10054.
Рассмотрим базовые настройки кластера 1С. Зачастую к накоплению невыгруженных процессов приводит слишком агрессивная политика перезапуска в сочетании с экстремально коротким временем ожидания завершения.
Выполним корректировку свойств кластера через консоль администрирования 1С:
86400 или 604800 секунд, в зависимости от динамики утечек памяти).300-600 секунд (5–10 минут). Слишком малое значение (например, 30 секунд) приводит к тому, что процесс принудительно обрывается до того, как успевает корректно закрыть соединения, что оставляет сетевые сокеты в ОС заблокированными.0 (или -1), чтобы кластер балансировал нагрузку автоматически без создания избыточных процессов.Проанализируем пользовательские сессии. Некорректно завершенные клиенты или забытые рабочие места удерживают открытые TCP-сокеты на сервере, мешая процессам завершать свою работу.
1200 секунд / 20 минут).1800 секунд / 30 минут).Если специфика информационной базы требует параллельной работы большого числа процессов, разберем способ устранения жесткого лимита в 32 процесса.
1560:1591 на более широкий, например, 1560:1691.ragent), чтобы применить новые границы доступных сетевых сокетов.Посмотрим на системный уровень взаимодействия. По умолчанию в Windows время ожидания проверки активности потерянных TCP-сессий (TCP Keep-Alive) составляет 2 часа. Если клиент отключается нештатно (сбой сети, переход в спящий режим), сервер держит сокет открытым до 120 минут, блокируя выгрузку rphost.
Оптимизируем системные параметры операционной системы:
regedit на сервере 1С.
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
DWORD (32 бита) с именем KeepAliveTime и зададим значение 300000 (в десятичной системе, что соответствует 5 минутам).DWORD (32 бита) с именем KeepAliveInterval со значением 1000 (1 секунда).Large Send Offload (LSO), IPv4 Checksum Offload, а также отключим энергосберегающие режимы сетевой карты.Если после выполнения вышеописанных настроек процессы продолжают накапливаться, проанализируем выполнение прикладного кода. Причиной зависания rphost могут быть бесконечные циклы в регламентных заданиях или зависшие внешние COM-соединения.
EXCP, ATTN, CALL, CONN, PROC.