Терминальный сервер на 50 пользователей с 16 ГБ памяти «тормозит»: сколько ресурсов на сессию нужно на самом деле и почему роли нельзя складывать в одну машину

Что было. Виртуальная машина с Windows Server 2022: 6 vCPU, 16 ГБ памяти. На ней одновременно контроллер домена, SQL Server (ограничен 4 ГБ) и узел сеансов RDS для 50 пользователей. Первые часы после старта работает, затем память под 97 %, всё замедляется до неприемлемого.

Ответ, который получил автор. Машина недостаточна для такой нагрузки в несколько раз. Ориентиры из ответа: не менее 1 ГБ памяти на сессию для базовой офисной работы (браузер с десятком вкладок съедает 1–2 ГБ сам), плюс ОС и службы, плюс приложения; для 50 пользователей минимум 64 ГБ, при тяжёлых приложениях 128 ГБ; процессор 8 ядер/16 потоков и выше. Арифметика автора: после ОС, домена и SQL на 50 сессий оставалось около 320 МБ на каждую.

Как посчитать для своего случая.

  1. Замерить, а не угадывать: Get-Process -IncludeUserName | Group-Object UserName | ForEach-Object { [pscustomobject]@{User=$_.Name; MB=[int](($_.Group | Measure-Object WorkingSet64 -Sum).Sum/1MB)} } | Sort MB -Descending на текущем сервере в рабочее время покажет реальную память на пользователя.
  2. Память = (память ОС и служб ~3–4 ГБ) + (пользователей × средняя память сессии × 1,3 запаса).
  3. Процессор: 1 vCPU на 4–6 офисных пользователей; для браузерных приложений плотнее не получится.
  4. Диск: сотни одновременных мелких операций; SSD-класс обязателен, иначе вход занимает минуты.

Почему роли надо разносить. Контроллер домена и база данных на терминальном сервере это не только производительность:

  • Пользователи терминального сервера получают интерактивный вход на контроллер домена, что нарушает базовую модель безопасности домена.
  • SQL Server забирает память под кэш и конкурирует с сессиями; при нехватке проигрывают все.
  • Перезагрузка терминального сервера ради обновления кладёт домен и базу.
    Правильно: отдельная небольшая машина под домен, отдельная под базу, узлы сеансов масштабируются добавлением машин, а не памяти в одну.

Быстрые меры, пока ресурсов не добавили.

  • Лимиты отключённых сессий (об этом отдельный разбор): отключённые сессии держат память.
  • Отключить лишнее в сессиях: визуальные эффекты, фоновые приложения автозапуска, второй браузер.
  • Исключения антивируса для каталогов профилей и баз, чтобы не сканировать одно и то же на 50 сессий.
  • Не «лечить» файлом подкачки: подкачка на 50 сессий превращает медленную работу в стоящую.

Что смотреть в диспетчере задач. Вкладка «Пользователи» с колонками памяти и процессора; если несколько сессий держат по 3–4 ГБ, дело в приложении (утечка, тяжёлые вкладки), и добавить память мало: нужно ограничивать приложение.

Настройка производительности узлов сеансов описана в документации Microsoft.