В этой статье я собрал несколько решений частных проблем с плохой производительностью RDS серверов или опубликованных RemoteApp приложений, с которыми я встречался в своей инфраструктуре. Прежде чем применять то или иное решение, проверьте что оно соответствует вашей инфраструктуре и окружению.
Падение производительности RDS в Windows Server 2016/2019 с UPD
На RDS серверах с Windows Server 2019/2016 с большим количеством пользователей можно столкнутся с плохой производительностью при использовании для профилей пользователей User Profile Disks.
Проблема заключается в том, в брандмауэре Windows Defender Firewall создаются новые входящие и исходящие правила при каждом входе пользователя, и эти правила не удаляется при завершении сессии.
Со временем количество таких правил в брандмауэре становится очень много, что вызывает существенное падение производительности RDS сервера (медленный вход в систему, черный экран при входе по RDP, зависают RDS хосты, не открываются меню и не отображается кнопка Пуск).
Проверьте количество правил в Windows Defender Firewall с помощью команды PowerShell:
(Get-NetFirewallRule).count
В моем случае на одном их хостов оказалось 18 тысяч правил! Эти правила создаются для UWP приложений магазина Windows при каждом входе пользователя.
Для исправления проблемы нужно сначала установить все обновления безопасности для вашей версии Windows Server (как минимум KB4467684 для Windows Server 2016 и KB4490481 для Windows Server 2019). Затем создайте следующий параметр реестра на RDSH хосте:
- Ветка: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy
- Тип: REG_DWORD
- Параметр: DeleteUserAppContainersOnLogoff
- Значение:
1
Можно создать параметр реестра с помощью команды PowerShell:
New-ItemProperty -Path “HKLM:\SYSTEM\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy” -Type DWord -Path -Name DeleteUserAppContainersOnLogoff -Value 1
Не забудьте вручную очистить входящие и исходящих правил в Windows Defender Firewall. Если правил файервола немного, можно использовать готовый PowerShell скрипт с форума TechNet (https://social.microsoft.com/Forums/Azure/en-US/992e86c8-2bee-4951-9461-e3d7710288e9/windows-servr-2016-rdsh-firewall-rules-created-at-every-login?forum=winserverTS).
Проблемы с мышью в RDP сессии на Windows Server 2019/2016 RDS
Многие пользователи стали жаловаться на проблемы с мышью в RDP сессии после миграции фермы RDS на Windows Server 2019. Мышь очень медленно реагирует на движения, курсор дрожит и зависает.
Эта проблема может связана с высокой частотой опроса (Report Rate) и DPI в настройках некоторых оптических мышек (обычно у игровых мышей). Например, у популярной мыши Logitech G203 по умолчанию задана частота опроса 1000 раз в секунду (1000 Гц). Высокая скорость опроса мыши похоже вызывает высокую нагрузку на RDP подключение, и вы можете столкнуться с тормозами при работе с RemoteApp приложениями. Если уменьшить это значение до 125 раз в секунду (125 Гц), проблема с мышкой в RDP сессии исчезнет.
Уменьшить Polling Rate/Report Rate можно в утилитах настройки параметров мыши от вендора.
Если вы не можете уменьшить частоту опроса, попробуйте в настройках мыши в панели управления Windows (
main.cpl
) отключить тень курсора мыши (отключите опцию Enable pointer shadow) и выбрать схему None для указателя.
Медленно работают RemoteApp и отрисовываются меню в Windows 10
При обновлении билда Windows 10 пользователи могут столкнуться с проблемами при работе с RemoteApp приложения, опубликованными на RDS серверах Windows Server 2019/2016/2012К2. RemoteApp могут начать работать заметно медленнее, любое действие, которое вызывается щелчком мыши выполняется (отрисовывается?) в 2-3 раза дольше. Особенно медленно отображаются контекстные меню в приложениях RemoteApp (пункты меню мерцают, приходится нажимать на них по несколько раз, иногда совсем не появляются). Такие проблемы массово встречали при обновлении билда Windows 10 на клиентах до 1803 и 20H2.
При этом проблемы не проявляются в окне обычного подключения к RDS серверу с помощью клиента Mstsc или RDCMan.
Для временного решения проблемы можно попробовать в редакторе локальной GPO (gpedit.msc) на RDS серверах изменить значение параметра Use advanced RemoteFX graphics for RemoteApp (Использовать дополнительную графику для удаленного приложения RemoteApp) на Disabled (раздел Computer Configuration -> Policies -> Administrative Templates -> Windows Components -> Remote Desktop Services -> Remote Desktop Session Host -> Remote Session Environment, в русской редакции Windows путь такой: Компоненты Windows -> Службы удаленных рабочих столов -> Узел сеансов удалённых рабочих столов -> Среда удаленных сеансов).
Также есть обходное решение, которое заключается в замене версии клиента RDP на более старую. Т.к. проблемы с производительностью Remoteapp встречались еще в Windows 10 1709, лучше всего использовать библиотеки RDP из 1607 или 1703.
Дело в том, что после апгрейда билда Windows 10 в системе устанавливается новая версия клиента RDP, которая на данный момент работает некорректно с опубликованными через RemoteApp приложениями.
Если заменить файлы mstsc.exe и mstscax.dll в каталоге C:\Windows\System32 на версии файлов из предыдущего билда Windows 10 (1703 или 1607), проблема с производительностью RemoteApp исчезает.
Как заменить файлы клиента RDP в Windows 10:
- Закройте все RDP подключения и запущенные RemoteApp (лучше даже перезагрузить компьютер);
- Скачайте архив с версиями файлов mstsc.exe и mstscax.dll из Windows 10 1607 (ссылка на скачивание с Я.Диска mstsc-w10-1607.zip);
- Скопируйте оригинальные файлы mstsc.exe и mstscax.dll из каталога C:\windows\system32\ в каталог C:\Backup с помощью команд:
md c:\backup\
copy C:\windows\system32\mstsc.exe c:\backup
copy C:\windows\system32\mstscax.dll c:\backup - Затем нужно назначить свою учетную запись владельцем файлов mstsc.exe и mstscax.dll в каталоге C:\windows\system32\, отключите наследование и предоставьте себе права на изменение файлов:
takeown /F C:\windows\system32\mstsc.exe
takeown /F C:\windows\system32\mstscax.dll
icacls C:\windows\system32\mstsc.exe /inheritance:d
icacls C:\windows\system32\mstscax.dll /inheritance:d
icacls C:\windows\system32\mstsc.exe /grant root:F
icacls C:\windows\system32\mstscax.dll /grant root:F
(в этом примере имя локальной учтённой записи с правами администратора – root. Замените ее на имя вашей учетной записи). - Замените файлы в каталоге C:\windows\system32\ файлами из скачанного архива;
- Восстановите оригинальные разрешения на заменённых файлах. Включите наследование NTFS разрешений и установите владельцем файлов NT Service\TrustedInstaller:
icacls C:\windows\system32\mstsc.exe /inheritance:e
icacls C:\windows\system32\mstscax.dll /inheritance:e
icacls C:\windows\system32\mstsc.exe /setowner "NT Service\TrustedInstaller" /T /C
icacls C:\windows\system32\mstscax.dll /setowner "NT Service\TrustedInstaller" /T /C - Осталось перерегистрировать библиотеку:
regsvr32 C:\Windows\System32\mstscax.dll
Это позволит временно исправить проблему с производительностью RemotApp в клиентах Windows 10.