Введение
Системный процесс 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-портов, открытых с учетом служб, можно получить с помощью команды.
In order to troubleshoot other kinds of problems with a service running inside an svchost instance, the service(s) suspected to be causing the problem must (all) be reconfigured so that each runs inside its own svchost instance. For example, will reconfigure the service named "foo" to run in its own svchost instance. Changing the back to is done by an analogous command. The service must be restarted for such a configuration change to take effect. This debugging process is not foolproof however; in some cases, a heisenbug may occur, which causes the problem to go away when the service is running separately. A more complex method of troubleshooting is to create an isolated service group. In Windows 10, starting with release 1703, svchost was redesigned by Microsoft to host only one service per process, depending on available system memory. The default setting causes services to be hosted independently if the system has at least 3.5 of RAM.
Для устранения других видов проблем со службой, работающей внутри экземпляра svchost, службу (службы), подозреваемую в возникновении проблемы, необходимо (все) переконфигурировать так, чтобы каждая работала в своем собственном экземпляре svchost. Например, команда переконфигурирует службу с именем "foo" для работы в собственном экземпляре svchost. Возврат к исходной конфигурации выполняется аналогичной командой. Для того чтобы такое изменение конфигурации вступило в силу, службу необходимо перезапустить. Этот процесс отладки не всегда надежен; в некоторых случаях может возникнуть ошибка heisenbug, из-за которой проблема исчезает при отдельном запуске службы. Более сложным методом устранения неполадок является создание изолированной группы служб. В Windows 10, начиная с выпуска 1703, svchost был переработан Microsoft для размещения только одной службы на процесс, в зависимости от доступной системной памяти. Настройка по умолчанию приводит к независимому размещению служб, если в системе установлено не менее 3,5 ГБ оперативной памяти.
In order to troubleshoot other kinds of problems with a service running inside an svchost instance, the service(s) suspected to be causing the problem must (all) be reconfigured so that each runs inside its own svchost instance. For example, will reconfigure the service named "foo" to run in its own svchost instance. Changing the back to is done by an analogous command. The service must be restarted for such a configuration change to take effect. This debugging process is not foolproof however; in some cases, a heisenbug may occur, which causes the problem to go away when the service is running separately. A more complex method of troubleshooting is to create an isolated service group. In Windows 10, starting with release 1703, svchost was redesigned by Microsoft to host only one service per process, depending on available system memory. The default setting causes services to be hosted independently if the system has at least 3.5 of RAM.