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

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

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

Анализируем симптомы и выявляем причину

Рассмотрим ситуацию: сервер 1С и сервер терминалов разнесены. Пользователи работают в тонком клиенте на RDP-сервере. В какой-то момент база перестает пускать новых людей, при этом старые сессии продолжают работать нормально. Попытка запуска отладки из конфигуратора выдает сообщение: "Для выполнения отладки необходимо включить поддержку сетевого протокола TCP/IP".

Проанализируем техническую сторону вопроса. Когда тонкий клиент 1С запускается, он устанавливает соединение с сервером 1С. Но помимо исходящего соединения, клиент может начать "слушать" определенные порты на локальной машине (в нашем случае — на RDP-сервере). Проверим это с помощью стандартной системной утилиты. Выполним в командной строке сервера терминалов:

netstat -ano | findstr 1560

Если мы увидим список процессов в состоянии LISTENING на портах из диапазона 1560–1591, значит, мы столкнулись именно с проблемой "зависшей" или избыточной отладки. Выясним, почему это происходит именно в этом диапазоне.

Механизм работы портов отладки в 1С

По умолчанию платформа 1С использует TCP-протокол для отладки. При включении режима "Разрешить отладку", каждый экземпляр приложения (будь то тонкий или толстый клиент) пытается занять первый свободный порт в жестко заданном диапазоне 1560–1591. Всего доступно 32 порта.

Разберем, в чем кроется ловушка для RDP-сервера:

  1. На обычном компьютере пользователя запущен один клиент. Он занимает порт 1560, и это никому не мешает.
  2. На сервере терминалов операционная система одна на всех. Первый зашедший пользователь занимает порт 1560, второй — 1561, тридцать второй — 1591.
  3. Когда пытается зайти тридцать третий пользователь, платформа ищет свободный порт в своем стандартном пуле (1560–1591), не находит его и падает с ошибкой сокета, которую ей возвращает Windows.

Важный нюанс: даже если вы расширите динамический диапазон портов в реестре Windows (параметр MaxUserPort), это не поможет, так как 1С ищет порты именно в своем фиксированном интервале.

Выясняем причину массового включения отладки

Почему вдруг у всех пользователей оказалась включена отладка, если они не программисты? Рассмотрим наиболее частый сценарий, связанный с механизмом копирования настроек в 1С. В типовых конфигурациях (например, ERP или УТ 11) администраторы часто используют обработку "Копирование настроек пользователей".

Если у "эталонного" пользователя, с которого копировались настройки интерфейса или прав, в параметрах был установлен флаг "Устанавливать режим разрешения отладки", этот флаг копируется в базу данных для всех остальных. Эти данные хранятся в системной таблице настроек (SystemSettings).

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

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

/NoDebug

Этот ключ принудительно запрещает клиенту открывать порты для прослушивания, игнорируя любые внутренние настройки пользователя. Рассмотрим, как это сделать массово для всех пользователей терминала через файл 1CEStart.cfg. В этот файл можно добавить строку:

AdditionalParameters=/NoDebug

Способ 2. Очистка пользовательских настроек в базе

Чтобы решить проблему фундаментально, необходимо вычистить настройки, которые заставляют клиент запускаться в режиме отладки. Проанализируем действия пользователя:

  1. Зайти в базу под проблемным пользователем.
  2. Перейти в меню Сервис — Параметры (в старых интерфейсах) или Настройки — Параметры.
  3. На вкладке "Запуск 1С:Предприятие" найти раздел "Дополнительно".
  4. Снять флаги "Устанавливать режим разрешения отладки" и "Начинать отладку при запуске".

Если пользователей много, воспользуемся программным способом очистки. Нам нужно удалить настройки с ключом "Общее/ПараметрыОтладки" (или аналогичные в зависимости от версии платформы) из хранилища системных настроек. Рассмотрим примерный фрагмент кода для обработки:


ВыборкаПользователей = ПользователиИнформационнойБазы.ПолучитьПользователей();
Для Каждого Пользователь Из ВыборкаПользователей Цикл
    // Очистка настроек отладки для каждого пользователя
    ХранилищеСистемныхНастроек.Удалить("Общее/ПараметрыЗапуска", "", Пользователь.Имя);
КонецЦикла;

Способ 3. Переход на современную HTTP-отладку

Платформа 1С:Предприятие начиная с версии 8.3.7 поддерживает протокол HTTP для отладки. Это кардинальный способ решения проблемы нехватки портов на RDP. Проанализируем его преимущества:

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

Оптимизация сетевых параметров ОС Windows

Хотя основная причина кроется в 1С, для высоконагруженных RDP-серверов полезно провести тюнинг стека TCP/IP. Если пользователей сотни, они могут исчерпать общие динамические порты. Выполним следующие настройки в реестре:

  1. Увеличим максимальное количество портов. Путь: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters. Параметр MaxUserPort установим в значение 65534 (десятичное).
  2. Уменьшим время ожидания закрытия сокета. В том же разделе создадим или изменим параметр TcpTimedWaitDelay, установив его в значение 30 (секунд). По умолчанию Windows держит закрытый порт "занятым" до 4 минут, что критично при массовых подключениях 1С.

Резюме по решению задачи

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

Применяя эти методы в комплексе, вы обеспечите стабильную работу пользователей и исключите внезапные падения платформы из-за сетевых конфликтов.

← На главную