Группирование узлов службы в Windows 10
Узел службы (svchost.exe) — это процесс общей службы, который служит оболочкой для загрузки служб из DLL-файлов. Службы организованы по связанным группам узлов, и каждая из них выполняется в разных экземплярах процесса узла службы. Таким образом, проблема в одном экземпляре не влияет на другие экземпляры. Группы узлов служб определяются путем объединения служб с соответствующими требованиями к безопасности. Пример:
- Локальная служба
- Локальная служба без сети
- Локальная сеть служб ограничена
- Локальная система
- Локальная сеть ограничена
- Сетевая служба
Разделение служб SvcHost
Начиная с Windows 10 Creators Update (версия 1703), службы, которые были сгруппированы ранее, будут разделены— каждый из них будет выполняться в своем собственном процессе SvcHost. Это изменение выполняется автоматически для систем с более чем 3,5 ГБ ОЗУ под управлением номера SKU клиентского рабочего стола. В системах с 3,5 ГБ или менее ОЗУ мы продолжим группировать службы в общий процесс SvcHost.
Это изменение структуры имеет следующие преимущества:
- Повышение надежности за счет изоляции критически важных сетевых служб от сбоя другой несети на узле и добавления возможности восстановления сетевых подключений при сбое сетевых компонентов.
- Снижение затрат на поддержку за счет устранения неполадок, связанных с изоляцией служб с неправильным поведением на общем узле.
- Повышение безопасности за счет большей изоляции между службами
- Повышение масштабируемости за счет предоставления параметров и привилегий для каждой службы
- Улучшено управление ресурсами за счет ЦП для каждой службы, операций ввода-вывода и управления памятью, а также увеличение четкого объема диагностических данных (отчеты о ЦП, использовании операций ввода-вывода и сети для каждой службы).
Попробуйте это
Чтобы увидеть поведение рефакторинга, создайте виртуальную машину Windows 10 версии 1703 и настройте параметры памяти следующим образом:
- Чтобы просмотреть сгруппированные процессы, задайте для ОЗУ значение 3484 МБ или меньше. Перезапустите виртуальную машину, а затем откройте диспетчер задач.
- Чтобы увидеть разделенные процессы, задайте для ОЗУ значение 3486 МБ или больше. Перезапустите виртуальную машину, а затем откройте диспетчер задач.
Рефакторинг также упрощает просмотр выполняемых процессов в диспетчере задач. Вы можете взглянуть на диспетчер задач и точно узнать, какая служба использует какие ресурсы, не расширяя множество отдельных групп узлов.
Например, ниже приведены выполняемые процессы, отображаемые в диспетчере задач в Windows 10 версии 1607:
Сравните это с тем же представлением запущенных процессов в Windows 10 версии 1703:
Исключения
Некоторые службы будут по-прежнему группироваться на компьютерах с объемом ОЗУ 3,5 ГБ или более. Например, базовая подсистема фильтрации (BFE) и брандмауэр Windows (Mpssvc) будут сгруппированы в одну группу узлов, как и службы сопоставления конечных точек RPC и удаленных вызовов процедур.
Если вам нужно определить службы, которые будут по-прежнему группироваться, помимо просмотра их в диспетчере задач и использования средств командной строки, вы можете найти значение SvcHostSplitDisable в соответствующих ключах служб в разделе HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services.
Значение по умолчанию 1 предотвращает разделение службы.
Например, конфигурация раздела реестра для BFE:
Объем памяти
Разделение служб увеличивает общее число экземпляров SvcHost, что увеличивает использование памяти. (Группирование служб обеспечило незначительное сокращение общего объема ресурсов для задействованных служб.)
Рассмотрим следующий пример:
Сгруппированные службы (< 3,5 ГБ) | Разделенные службы (3,5 ГБ+) |
---|---|
![]() |
![]() |
Примечание.
Выше представлены пиковые наблюдаемые значения.
Общее количество экземпляров службы и результирующее использование памяти зависит от действия. Число экземпляров обычно может варьироваться от 17 до 21 для сгруппированных служб и 67–74 для разделенных служб.
Попробуйте это
Чтобы определить влияние разделения размещенных служб на компьютере с Windows 10 версии 1703, выполните следующий командлет Windows PowerShell до и после переключения параметров памяти:
Get-Process SvcHost | Group-Object -Property ProcessName | Format-Table Name, Count, @{n='Mem (KB)';e={'{0:N0}' -f (($_.Group|Measure-Object WorkingSet -Sum).Sum / 1KB)};a='right'} -AutoSize