В процессе эксплуатации 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, что и приводит к падению платформы.
Прежде чем менять настройки, разберем ситуацию «в полях». На терминальном сервере запустим командную строку от имени администратора и выполним следующую команду:
netstat -ano | findstr "156"
Проанализируем вывод. Если мы видим большое количество строк, где порты в диапазоне 1560-1591 находятся в состоянии LISTENING и принадлежат процессам 1cv8c.exe, это явный признак того, что у пользователей включен режим отладки. Выясним причину, почему это произошло массово.
Даже если проблема не в отладке, для стабильной работы 80 и более пользователей на одном сервере необходимо оптимизировать параметры TCP/IP. Разберем, какие параметры реестра стоит изменить, чтобы расширить возможности ОС по обработке соединений.
Перейдем в ветку реестра HKLM\System\CurrentControlSet\Services\Tcpip\Parameters и установим следующие значения:
65535 (десятичное). Это увеличит максимальное количество динамических портов.30 (десятичное). Это уменьшит время, в течение которого порт остается в состоянии TIME_WAIT после закрытия соединения, позволяя быстрее использовать его повторно.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С, если она включена у всех пользователей.
Как показывает практика, часто режим отладки оказывается включен у пользователей случайно. Рассмотрим типичный сценарий: администратор настроил «эталонного» пользователя (расположение панелей, списки документов, доп. реквизиты) и скопировал эти настройки всем остальным через консоль администрирования или специальную обработку. Если в момент копирования у эталонного пользователя была активна галочка «Отладка в текущем сеансе разрешена», она пропишется в настройки всем сотрудникам.
Чтобы исправить это, нам необходимо очистить пользовательские настройки. В интерфейсе 1С это можно сделать следующим образом:
В случае, если пользователей много, разберем, как сделать это программно. Нам нужно очистить системную настройку с именем "ПараметрыОтладки" (или аналогичную, влияющую на запуск). Но самым быстрым способом будет удаление записей в таблице настроек через встроенную обработку «Очистка настроек пользователей».
Если отладка действительно необходима группе разработчиков на этом же сервере, мы можем расширить пул доступных портов для рабочих процессов на стороне сервера 1С. Посмотрим на параметры запуска службы 1С:Предприятие. По умолчанию используется диапазон 1560:1591. Мы можем изменить его в консоли администрирования кластера:
1560:1691.Важно: Это поможет серверным процессам (rphost), но тонкий клиент на стороне пользователя все равно будет ориентироваться на свои внутренние механизмы. Поэтому для терминальных серверов лучшим решением остается полный запрет отладки для рядовых пользователей.
Если ваша версия платформы 8.3.7 и выше, мы настоятельно рекомендуем рассмотреть переход с TCP-отладки на HTTP-отладку. Разберем преимущества: при использовании протокола HTTP клиентские приложения не открывают локальные порты «на прослушку». Вместо этого они взаимодействуют со специальным сервисом — сервером отладки (dbgs).
Для включения этого режима на сервере 1С необходимо изменить параметры запуска службы, добавив ключ -http. Это полностью снимает проблему конфликтов сокетов на RDP-сервере, так как механизмы занятия портов 1560–1591 в этом случае не задействуются.
Подводя итог, если вы столкнулись с внезапным падением платформы 1С на терминальном сервере, выполните следующие действия:
netstat, не забит ли диапазон 1560–1591.TcpTimedWaitDelay и MaxUserPort в реестре Windows.Проанализировав ситуацию таким образом, вы обеспечите стабильную работу большого количества пользователей даже на нагруженных RDP-системах.