Почему тонкий клиент 1С падает на RDP-сервере с ошибкой использования адреса сокета и как решить проблему нехватки портов

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

В процессе эксплуатации 1С:Предприятие в терминальном режиме (RDP) системные администраторы часто сталкиваются с ситуацией, когда после подключения определенного количества пользователей (например, 30–50 человек) новые сессии перестают запускаться, а сама платформа аварийно завершает работу. При этом в технологическом журнале или системных событиях Windows фиксируется ошибка: "Обычно разрешается одно использование адреса сокета (протокол/сетевой адрес/порт)". Рассмотрим подробно, почему это происходит и как исправить данную ситуацию.

Анализируем природу ошибки сетевого стека

Данная ошибка генерируется операционной системой Windows, когда приложение пытается открыть TCP-порт, который уже занят другим процессом или находится в состоянии ожидания закрытия. В контексте сервера удаленных рабочих столов (RDS) проблема усугубляется тем, что все пользователи работают под одним внешним IP-адресом сервера. Проанализируем, как 1С использует сетевые ресурсы.

Для стандартной работы тонкого клиента обычно используются динамические порты (ephemeral ports), диапазон которых в современных версиях Windows достаточно широк (49152–65535). Однако в 1С есть специфический функционал — отладка. По умолчанию для отладки по протоколу TCP/IP зарезервирован узкий диапазон портов: 1560–1591 (всего 32 порта).

Если у пользователя в настройках включен режим отладки, его клиентское приложение при запуске пытается «застолбить» за собой один из портов в этом диапазоне, чтобы ожидать входящих соединений от отладчика. Поскольку на RDP-сервере IP-адрес общий, 33-й пользователь, у которого включена отладка, просто не сможет найти свободный порт в диапазоне 1560-1591, что и приводит к падению платформы.

Шаг 1. Проверка состояния портов через утилиту netstat

Прежде чем менять настройки, разберем ситуацию «в полях». На терминальном сервере запустим командную строку от имени администратора и выполним следующую команду:

netstat -ano | findstr "156"

Проанализируем вывод. Если мы видим большое количество строк, где порты в диапазоне 1560-1591 находятся в состоянии LISTENING и принадлежат процессам 1cv8c.exe, это явный признак того, что у пользователей включен режим отладки. Выясним причину, почему это произошло массово.

Шаг 2. Настройка сетевого стека Windows для высоких нагрузок

Даже если проблема не в отладке, для стабильной работы 80 и более пользователей на одном сервере необходимо оптимизировать параметры TCP/IP. Разберем, какие параметры реестра стоит изменить, чтобы расширить возможности ОС по обработке соединений.

Перейдем в ветку реестра HKLM\System\CurrentControlSet\Services\Tcpip\Parameters и установим следующие значения:

  1. MaxUserPort = 65535 (десятичное). Это увеличит максимальное количество динамических портов.
  2. TcpTimedWaitDelay = 30 (десятичное). Это уменьшит время, в течение которого порт остается в состоянии TIME_WAIT после закрытия соединения, позволяя быстрее использовать его повторно.
  3. MaxFreeTcbs = 100000. Увеличивает количество блоков управления TCP.

Также воспользуемся командой netsh для настройки диапазона динамических портов:


netsh int ipv4 set dynamic port tcp start=1025 num=64510
netsh int ipv4 set dynamic port udp start=1025 num=64510

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

Шаг 3. Выявление и устранение причины массовой активации отладки

Как показывает практика, часто режим отладки оказывается включен у пользователей случайно. Рассмотрим типичный сценарий: администратор настроил «эталонного» пользователя (расположение панелей, списки документов, доп. реквизиты) и скопировал эти настройки всем остальным через консоль администрирования или специальную обработку. Если в момент копирования у эталонного пользователя была активна галочка «Отладка в текущем сеансе разрешена», она пропишется в настройки всем сотрудникам.

Чтобы исправить это, нам необходимо очистить пользовательские настройки. В интерфейсе 1С это можно сделать следующим образом:

  1. Зайдем в раздел Главное — Персональные настройки (или через меню Сервис — Параметры, в зависимости от конфигурации).
  2. Перейдем на закладку Прочие настройки.
  3. Проанализируем состояние флага "Отладка в текущем сеансе разрешена".
  4. Если флаг установлен — снимем его.

В случае, если пользователей много, разберем, как сделать это программно. Нам нужно очистить системную настройку с именем "ПараметрыОтладки" (или аналогичную, влияющую на запуск). Но самым быстрым способом будет удаление записей в таблице настроек через встроенную обработку «Очистка настроек пользователей».

Шаг 4. Настройка параметров службы 1С (на сервере приложений)

Если отладка действительно необходима группе разработчиков на этом же сервере, мы можем расширить пул доступных портов для рабочих процессов на стороне сервера 1С. Посмотрим на параметры запуска службы 1С:Предприятие. По умолчанию используется диапазон 1560:1591. Мы можем изменить его в консоли администрирования кластера:

  1. Откроем Консоль администрирования кластера 1С.
  2. Перейдем в свойства Рабочего сервера.
  3. Найдем поле "Диапазон портов".
  4. Вместо стандартного значения можно указать более широкий диапазон, например 1560:1691.

Важно: Это поможет серверным процессам (rphost), но тонкий клиент на стороне пользователя все равно будет ориентироваться на свои внутренние механизмы. Поэтому для терминальных серверов лучшим решением остается полный запрет отладки для рядовых пользователей.

Шаг 5. Переход на HTTP-отладку (современный метод)

Если ваша версия платформы 8.3.7 и выше, мы настоятельно рекомендуем рассмотреть переход с TCP-отладки на HTTP-отладку. Разберем преимущества: при использовании протокола HTTP клиентские приложения не открывают локальные порты «на прослушку». Вместо этого они взаимодействуют со специальным сервисом — сервером отладки (dbgs).

Для включения этого режима на сервере 1С необходимо изменить параметры запуска службы, добавив ключ -http. Это полностью снимает проблему конфликтов сокетов на RDP-сервере, так как механизмы занятия портов 1560–1591 в этом случае не задействуются.

Заключение

Подводя итог, если вы столкнулись с внезапным падением платформы 1С на терминальном сервере, выполните следующие действия:

Проанализировав ситуацию таким образом, вы обеспечите стабильную работу большого количества пользователей даже на нагруженных RDP-системах.

← На главную