Введение

Системный процесс Windows

Svchost.exe (Service Host, или SvcHost) — это системный процесс, который может размещать один или несколько сервисов Windows в семействе операционных систем Windows NT. Svchost играет важную роль в реализации процессов совместного использования служб, когда несколько служб могут совместно использовать один процесс для снижения потребления ресурсов. Объединение нескольких служб в один процесс позволяет экономить вычислительные ресурсы, и этот аспект был особенно важен для разработчиков NT, поскольку создание процессов Windows занимает больше времени и требует больше памяти, чем в других операционных системах, например, в семействе Unix. Однако, если одна из служб вызывает необработанное исключение, весь процесс может аварийно завершить работу. Кроме того, для конечных пользователей может быть сложнее идентифицировать отдельные службы, работающие в этом процессе. Проблемы с различными службами, размещенными в svchost, особенно с Windows Update, часто сообщаются пользователями (и освещаются в прессе) как связанные со svchost. Процесс svchost был представлен в Windows 2000, хотя базовая поддержка процессов общих служб существует с Windows NT 3.1.

Изменения в группировке хостов в Windows 10

Начиная с Windows 10 версии 1903, Microsoft изменила способ организации служб в хост-процессы. На клиентских компьютерных системах с объемом памяти более 3,5 ГБ службы больше не объединяются в общие хост-процессы. Вместо этого каждая служба запускается в собственном процессе. Это обеспечивает лучшую изоляцию служб, повышая устойчивость компьютерной системы к сбоям и уязвимостям, а также упрощая отладку. Однако это приводит к некоторому увеличению потребления памяти.

Сервисные метки

Начиная с Windows Vista, внутренняя идентификация служб внутри общих процессов (включая svchost) осуществляется с помощью так называемых тегов службы. Тег службы для каждого потока хранится в поле SubProcessTag блока среды потока (TEB). Тег распространяется на все потоки, запускаемые основным потоком службы, за исключением потоков, созданных косвенно API-интерфейсами пула потоков Windows. Набор процедур управления тегами служб в настоящее время является недокументированным API, хотя он используется некоторыми утилитами Windows, такими как netstat, для отображения TCP-соединений, связанных с каждой службой. Некоторые сторонние инструменты, такие как ScTagQuery, также используют этот API. Список TCP-соединений и UDP-портов, открытых с учетом служб, можно получить с помощью команды.

Для устранения других видов проблем со службой, работающей внутри экземпляра svchost, службу (службы), подозреваемую в возникновении проблемы, необходимо (все) переконфигурировать так, чтобы каждая работала в своем собственном экземпляре svchost. Например, команда переконфигурирует службу с именем "foo" для работы в собственном экземпляре svchost. Возврат к исходной конфигурации выполняется аналогичной командой. Для того чтобы такое изменение конфигурации вступило в силу, службу необходимо перезапустить. Этот процесс отладки не всегда надежен; в некоторых случаях может возникнуть ошибка heisenbug, из-за которой проблема исчезает при отдельном запуске службы. Более сложным методом устранения неполадок является создание изолированной группы служб. В Windows 10, начиная с выпуска 1703, svchost был переработан Microsoft для размещения только одной службы на процесс, в зависимости от доступной системной памяти. Настройка по умолчанию приводит к независимому размещению служб, если в системе установлено не менее 3,5 ГБ оперативной памяти.