Почему зависают все сеансы 1С на терминальном сервере и как это исправить

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

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

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

Диагностика сетевого соединения: поиск потерь больших пакетов

Платформа 1С:Предприятие активно передает между клиентом и кластером большие объемы сериализованных данных. Стандартная проверка утилитой ping с размером пакета по умолчанию (32 байта) может показывать идеальный отклик, в то время как пакеты реального размера будут теряться или фрагментироваться на уровне сетевых коммутаторов и виртуальных адаптеров.

Проанализируем сетевой канал с помощью отправки пакетов максимального размера. Для этого на проблемном терминальном сервере выполним команду в командной строке:

ping <Имя_Сервера_1С> -t -l 65000 -4

Для непрерывного мониторинга и фиксации момента аварии запишем результаты проверки в текстовый файл с помощью перенаправления вывода:

ping <Имя_Сервера_1С> -t -l 65000 -4 > C:\Temp\ping_log.txt

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

Очистка серверного и пользовательского кэша 1С

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

  1. Завершим все зависшие клиентские процессы 1cv8c.exe и 1cv8.exe на терминальном сервере.
  2. Очистим содержимое пользовательских каталогов временных файлов:
    %LocalAppData%\1C\1cv8
    %AppData%\1C\1cv8
  3. Очистим системные временные файлы в папке %Temp% (включая каталоги вида v8_*).

Отключение аппаратных разгрузок сетевого адаптера (Offloading)

Современные физические и виртуальные сетевые карты используют технологии разгрузки сетевого стека, такие как Large Send Offload (LSO), TCP Chimney Offload и Receive Side Scaling (RSS). В условиях интенсивной многопользовательской нагрузки на терминальном сервере эти функции могут вызывать сбои драйвера и «залипание» TCP-сокетов.

Выполним настройку сетевой карты на терминальном сервере и сервере 1С:

  1. Откроем Диспетчер устройств и перейдем в свойства используемого сетевого адаптера на вкладку Дополнительно (Advanced).
  2. Переведем параметры Large Send Offload (LSO) v2 (IPv4) и Large Send Offload (LSO) v2 (IPv6) в значение Disabled.
  3. Отключим энергосберегающие функции адаптера: Energy Efficient Ethernet (EEE) и Green Ethernet.
  4. На вкладке Управление электропитанием снимем флажок Разрешить отключение этого устройства для экономии энергии.

Оптимизация параметров TCP/IP и предотвращение сброса сессий

Если между серверами настроен межсетевой экран с контролем состояния сессий (Stateful Firewall), он может принудительно разрывать неактивные TCP-соединения по собственному таймауту. В результате 1С-клиент считает соединение открытым, а брандмауэр уже уничтожил запись о сессии.

Скорректируем поведение механизма проверки активности соединений (Keep-Alive) в системном реестре Windows:

  1. Откроем редактор реестра и перейдем в ветку:
    HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
  2. Создадим или изменим параметр типа DWORD (32-bit) с именем KeepAliveTime и зададим значение 300000 (в десятичной системе, что соответствует 5 минутам вместо стандартных 2 часов).
  3. Создадим параметр KeepAliveInterval типа DWORD (32-bit) со значением 1000 (интервал повтора в 1 секунду).

Расширение диапазона динамических портов

На высоконагруженном терминальном сервере с десятками пользователей активные процессы 1С открывают множество одновременных TCP-соединений к кластеру серверов. При нехватке временных портов (Ephemeral Ports) создание новых соединений и подтверждение пакетов блокируются для всех пользователей.

Проверим текущее состояние портов командой:

netsh int ipv4 show dynamicport tcp

При необходимости расширим диапазон портов следующей командой:

netsh int ipv4 set dynamicport tcp start=10000 num=55000

Настройка исключений безопасности

Антивирусные комплексы и EDR-системы могут кратковременно блокировать сетевые потоки 1С и дескрипторы временных файлов в профилях пользователей при высокой дисковой активности.

  1. Добавим в список исключений сканирования каталоги установки платформы 1С: C:\Program Files\1cv8\* и C:\Program Files (x86)\1cv8\*.
  2. Исключим сетевой трафик по портам кластера 1С (диапазоны 1540-1541, 1560-1591).
  3. Добавим в постоянные исключения мониторинга временные папки пользователей AppData\Local\Temp\v8_*.

Альтернативное решение: публикация баз на веб-сервере

Если сетевая инфраструктура между серверами подвержена нестабильности, эффективным архитектурным решением является публикация информационных баз на веб-сервере (IIS или Apache). Перевод тонких клиентов на протокол HTTP/HTTPS существенно повышает устойчивость к кратковременным микроразрывам сети, снижает чувствительность к фрагментации пакетов и полностью решает проблему исчерпания прямых TCP-сессий между терминалом и кластером 1С.

← На главную