Ситуация, когда работа пользователей в терминальной сессии внезапно прерывается, а новые подключения заканчиваются «черным экраном», является критической для любого бизнеса. Особенно часто с этим сталкиваются администраторы систем на базе Windows Server 2016 при использовании 1С. Проблема проявляется специфически: при попытке сохранить печатную форму или отчет в формате XLS на «проброшенный» через RDP локальный диск пользователя, приложение 1С зависает, а следом за ним начинает деградировать вся служба удаленных рабочих столов.
В этой статье мы подробно разберем причины возникновения этой ошибки, проанализируем поведение системных служб и рассмотрим пошаговые инструкции по устранению данной неисправности.
Рассмотрим стандартный сценарий развития сбоя, который мы будем анализировать:
8.3.10 или 8.3.12, обычное приложение).\\tsclient\C\Отчеты).1cv8.exe перестает отвечать. При попытке завершить его через диспетчер задач ничего не происходит.Выясним причину такого поведения. Проанализируем системные логи сервера. Обычно в журнале событий Windows в моменты зависания фиксируются ошибки UmRdpService (User Mode Port Redirector) с кодом таймаута 30000 мс. Это сигнализирует о том, что служба перенаправления ресурсов вошла в состояние дедлока (мертвой блокировки).
Интересной особенностью является то, что при сохранении в формате XLSX проблема зачастую не воспроизводится. Проанализируем разницу между этими форматами с точки зрения взаимодействия с файловой системой через RDP-канал.
Формат XLS (старый бинарный стандарт Microsoft Excel) при записи требует множества мелких операций позиционирования в файле и частых обращений к дисковой подсистеме для обновления структуры бинарного дерева файла. В условиях работы через виртуальный канал RDP, любая задержка сети или микроразрыв приводят к тому, что поток записи «застревает».
В свою очередь, формат XLSX представляет собой упакованный XML-архив. 1С сначала формирует весь объем данных во временной папке сервера (%TEMP%), а затем одним последовательным потоком копирует готовый файл на целевой диск. Это создает гораздо меньшую нагрузку на службу UmRdpService, так как минимизируется количество транзакций записи.
Одной из наиболее вероятных причин зависания всей службы RDP при проблемах в одной сессии является механизм Fair Share (справедливое распределение ресурсов), внедренный в Windows Server. Функция Disk Fair Share призвана ограничивать нагрузку на диск со стороны одного пользователя, чтобы он не мешал другим. Однако при работе с сетевыми задержками и проброшенными дисками этот механизм часто ошибочно блокирует операции ввода-вывода, что приводит к зависанию всей цепочки служб.
Рассмотрим, как отключить этот механизм через реестр сервера:
regedit.exe).HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TSFairShare\DiskEnableFairShare.Disk нет, его необходимо создать, но обычно в Windows Server 2016 он присутствует по умолчанию.Как мы увидели в описании проблемы, система фиксирует превышение времени ожидания в 30 секунд для службы UmRdpService. Чтобы дать системе шанс «прокачать» данные через медленный канал без падения службы, мы можем увеличить глобальный таймаут ожидания ответов от служб.
Выполним следующие шаги:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\ControlDWORD 32 bit) параметр с именем ServicesPipeTimeout.60000 или 120000 (в десятичной системе), что соответствует 60 или 120 секундам.Если проблему не удается решить на уровне ОС, проанализируем возможность изменения бизнес-процесса. Поскольку XLSX работает стабильнее, рекомендуется административно или программно перевести пользователей на этот формат.
Разберем, почему это помогает. Как уже упоминалось, механизм сохранения XLSX в 1С более современен. В коде конфигураций (особенно в обычных формах УТ 10.3, КА 1.1) часто используется метод Записать(). Рассмотрим пример:
// Вместо старого формата:
ТабДок.Записать(ПутьКФайлу, ТипФайлаТабличногоДокумента.XLS);
// Используем современный формат:
ТабДок.Записать(ПутьКФайлу, ТипФайлаТабличногоДокумента.XLSX);
Если вы используете типовое решение, проинструктируйте пользователей выбирать в диалоговом окне сохранения именно Excel 2007+ (.xlsx). Это простое действие в 90% случаев полностью снимает вопрос зависаний.
Проброс дисков через RDP (RDPDR) — это сложный и не самый стабильный протокол. Если безопасность позволяет, лучше использовать классические сетевые папки (SMB). Однако пользователи часто боятся вирусов-шифровальщиков, которые могут уничтожить данные на сетевых дисках. Чтобы решить эту дилемму, рассмотрим правильную организацию файлового обмена:
Shadow Copies (теневые копии) минимум 2-3 раза в день.Windows Server Backup или Cobian Backup) на носитель, к которому у обычных пользователей нет прав на запись.Работа через SMB гораздо стабильнее, чем через виртуальный канал RDP, так как протокол SMB специально оптимизирован для передачи файлов и имеет развитые механизмы кэширования.
Проанализируем ситуацию на стороне клиента. Если пользователь подключается с Windows 10 Home или нестабильного интернет-канала, стоит попробовать переключить протокол RDP с UDP на TCP. Несмотря на то, что UDP ускоряет отрисовку графики, он может вызывать потерю пакетов данных при передаче файлов.
На клиентской машине выполните:
Win+R, введите gpedit.msc (если версия Home, используйте редактор реестра).HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services\ClientfClientDisableUDP (DWORD) и установите значение 1.Иногда зависание при сохранении в Excel вызвано спецификой формирования самого отчета. Разберем несколько технических моментов:
XLS движок 1С может потреблять колоссальное количество ресурсов. Попробуйте перед сохранением программно установить фиксированную высоту строк для проблемных отчетов.8.3.10.2561) не содержит известных багов утечки памяти при работе с COM-объектами Excel. Рекомендуется обновление до последних релизов веток 8.3.20+, где многие ошибки взаимодействия с RDP-каналами были исправлены.Подводя итог, можно сказать, что проблема «зависания при XLS» — это комплексная ошибка взаимодействия старого бинарного формата, протокола проброса дисков RDP и механизмов управления ресурсами Windows Server 2016. Применяя вышеописанные настройки реестра и переходя на формат XLSX, вы обеспечите стабильную работу сервера и избавите пользователей от необходимости постоянных перезагрузок.