Svchost.exe ( Service Host o SvcHost ) es un proceso del sistema que puede alojar desde uno hasta muchos servicios de Windows en la familia de sistemas operativos Windows NT . [1] Svchost es esencial en la implementación de procesos de servicios compartidos , donde varios servicios pueden compartir un proceso para reducir el consumo de recursos. Agrupar varios servicios en un solo proceso conserva los recursos informáticos, y esta consideración fue de particular interés para los diseñadores de NT porque la creación de procesos de Windows lleva más tiempo y consume más memoria que en otros sistemas operativos, por ejemplo, en la familia Unix .[2] Sin embargo, si uno de los servicios causa una excepción no controlada, todo el proceso puede fallar. Además, identificar los servicios de componentes puede resultar más difícil para los usuarios finales. Los problemas con varios servicios alojados, particularmente con Windows Update , [3] [4] son reportados por los usuarios (y encabezados por la prensa) como relacionados con svchost.
El proceso svchost se introdujo en Windows 2000 , [5] aunque el soporte subyacente para los procesos de servicios compartidos ha existido desde Windows NT 3.1 . [2]
Implementación
Su imagen ejecutable, % SystemRoot% \ System32 \ Svchost.exe o % SystemRoot% \ SysWOW64 \ Svchost.exe (para servicios de 32 bits que se ejecutan en sistemas de 64 bits) se ejecuta en varias instancias, cada una de las cuales aloja uno o más servicios.
Los servicios que se ejecutan en SvcHost se implementan como bibliotecas vinculadas dinámicamente (DLL). La clave de registro de cada servicio debe tener un valor denominado ServiceDll bajo el Subclave de parámetros , que apunta al archivo DLL del servicio respectivo. Su La definición de ImagePath tiene la forma % SystemRoot% \ System32 \ svchost.exe -k (grupo de servicio; es decir, netsvcs) . Los servicios que comparten el mismo proceso SvcHost especifican el mismo parámetro y tienen una sola entrada en la base de datos de SCM . La primera vez que se inicia un proceso SvcHost con un parámetro específico, busca un valor con el mismo nombre en el Clave HKLM \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ Svchost , que interpreta como una lista de nombres de servicios. Luego notifica al SCM de todos los servicios que aloja. SCM no lanza un segundo proceso SvcHost para ninguno de esos servicios recibidos: en su lugar, simplemente envía un comando de "inicio" al proceso SvcHost respectivo que contiene el nombre del servicio que debe ser lanzado dentro de su contexto, y cuya DLL SvcHost respectiva cargas.
Según una presentación de MS de 2003, el conjunto mínimo de trabajo de un servicio compartido es de aproximadamente 150 KB en lugar de 800 KB para un proceso independiente. [6]
Cambios en la agrupación de hosts de servicio en Windows 10
A partir de la versión 1903 de Windows 10, Microsoft cambió la forma en que los servicios se agrupan en procesos de host. [7] En los sistemas informáticos cliente con más de 3,5 GB de memoria, los servicios ya no se agrupan en procesos de host compartido. En cambio, cada servicio se ejecuta en su propio proceso. Esto da como resultado un mejor aislamiento de los servicios, lo que hace que el sistema informático sea más resistente a las fallas y vulnerabilidades del servicio y más fácil de depurar. Sin embargo, agrega algo de sobrecarga de memoria.
Etiquetas de servicio
A partir de Windows Vista, la identificación interna de los servicios dentro de los procesos compartidos (incluido svchost) se logra mediante las denominadas etiquetas de servicio. La etiqueta de servicio para cada hilo se almacena en el SubProcessTag de su bloque de entorno de hilo (TEB). La etiqueta se propaga a todos los subprocesos que un subproceso de servicio principal inicia posteriormente, excepto los subprocesos creados indirectamente por las API de grupo de subprocesos de Windows . [8]
El conjunto de rutinas de administración de etiquetas de servicio es actualmente una API no documentada , aunque algunas utilidades de Windows como netstat lo utilizan para mostrar las conexiones TCP asociadas con cada servicio. Algunas herramientas de terceros como ScTagQuery también utilizan esta API. [8]
Svchost.exe (netsvcs)
Netsvcs es un subproceso utilizado por svchost.exe (netsvcs). [9] Si hay una fuga de memoria, svchost.exe consume y acapara la CPU. Este problema se produce porque se produce una fuga de identificador en el servicio Winmgmt después de instalar Windows Management Framework 3.0 en el equipo. [10] El servicio Winmgmt es el servicio Instrumental de administración de Windows (WMI) dentro del proceso svchost.exe que se ejecuta en la cuenta LocalSystem.
Identificación y gestión de servicios alojados
En Windows XP y ediciones posteriores, el comando tasklist / svc muestra una lista de los servicios ejecutados por cada proceso listado (es decir, por cada instancia en ejecución de svchost.exe), con cada instancia separada del proceso svchost identificada por un número de identificación de proceso (PID) único.
En Windows Vista y Windows 7 , la pestaña "Servicios" en el Administrador de tareas de Windows incluye una lista de servicios, que muestra sus grupos e ID de proceso (PID); al hacer clic con el botón derecho en una instancia de svchost en la pestaña "Procesos" del Administrador de tareas y seleccionar "Ir a servicio (s)", se cambia a esa lista de servicios y se selecciona el servicio que se ejecuta en la instancia de svchost correspondiente.
En Windows 8 , la interfaz del Administrador de tareas se simplificó para que cada entrada de svchost se pueda expandir con un solo clic a una sublista de servicios que se ejecutan dentro de ella.
El Explorador de procesos de Sysinternals (disponible como descarga gratuita de Microsoft) proporciona información adicional sobre los servicios que se ejecutan en procesos svchost.exe , cuando el usuario pasa el mouse sobre una instancia de svchost en Process Explorer.
Ninguno de los métodos anteriores permite al usuario identificar cuál de los múltiples servicios que se ejecutan dentro de una instancia de svchost accede a un recurso particular, es decir, procesador, disco, red o memoria; el Monitor de recursos de Windows solo tiene en cuenta (la mayoría de) esos recursos a nivel de proceso. Sin embargo, muestra el uso del procesador a nivel de servicio, en la pestaña "CPU". [11] Se puede obtener una lista de servicio de conexiones TCP y puertos UDP abiertos usando el comando netstat -b . [12]
Para solucionar otros tipos de problemas con un servicio que se ejecuta dentro de una instancia de svchost, los servicios que se sospecha que causan el problema deben (todos) reconfigurarse para que cada uno se ejecute dentro de su propia instancia de svchost. Por ejemplo, sc config foo type= own
reconfigurará el servicio llamado "foo" para que se ejecute en su propia instancia de svchost. Cambiando el escriba de nuevo a shared se realiza mediante un comando análogo. El servicio debe reiniciarse para que dicho cambio de configuración surta efecto. Sin embargo, este proceso de depuración no es infalible; en algunos casos, puede producirse un error de heisen , que hace que el problema desaparezca cuando el servicio se ejecuta por separado. [13]
Un método más complejo de resolución de problemas es crear un grupo de servicios aislado. [14]
En Windows 10 , a partir de la versión 1703, Microsoft rediseñó svchost para alojar solo un servicio por proceso, según la memoria del sistema disponible. [15] La configuración predeterminada hace que los servicios se alojen de forma independiente si el sistema tiene al menos 3,5 GB de RAM.
Ver también
Referencias
- ↑ Russinovich, Solomon & Ionescu (2009 : 302)
- ^ a b "Servicios compartidos" . Consultado el 1 de octubre de 2014 .
- ^ Woody Leonhard (16 de diciembre de 2013). "Microsoft promete arreglar las líneas rojas de Windows XP SVCHOST 'tan pronto como sea posible ' " . InfoWorld . Consultado el 1 de octubre de 2014 .
- ^ "Svchost.exe empeora antes de que se solucione - Serie - Secretos de Windows" . Consultado el 1 de octubre de 2014 .
- ^ "¿Cómo solucionar problemas relacionados con Service Host (svchost.exe)?" . Consultado el 1 de octubre de 2014 .
- ^ David B. Probert, Procesos de servicio de Windows
- ^ Cambios en la agrupación de host de servicio en Windows 10
- ↑ a b Russinovich, Solomon & Ionescu (2012 : 335)
- ^ "High CPU Usage by svchost.exe (nets" . Appuals.com . 2015-12-03 . Consultado el 2016-08-12 .
- ^ "Alto uso de memoria por parte de Svchost.exe" . support.microsoft.com . Consultado el 12 de agosto de 2016 .
- ^ "Descubriendo por qué mi SVCHOST.EXE está al 100% de CPU sin herramientas complicadas en Windows 7 - Scott Hanselman" . Consultado el 1 de octubre de 2014 .
- ^ Si esto es útil es dudoso, generalmente muestra solo el nombre del servicio para el navegador web en ejecución (por ejemplo, enumera varios elementos de información relacionados con la conexión a Internet y los puertos en uso, pero los registra como simplemente "firefox.exe ")
- ^ "¿Qué es svchost.exe y por qué tengo tantas instancias?" . Consultado el 1 de octubre de 2014 .
- ^ "Introducción a la resolución de problemas de SVCHOST.EXE" . Consultado el 1 de octubre de 2014 .
- ^ "Cambios en la agrupación de host de servicio en Windows 10" . Microsoft . Consultado el 30 de abril de 2018 .
Otras lecturas
- Russinovich, Mark ; Salomón, David; Ionescu, Alex (2009), Windows® Internals (5.a ed.), Microsoft Press , ISBN 978-0-7356-2530-3
- Russinovich, Mark ; Salomón, David; Ionescu, Alex (2012), aspectos internos de Windows. Parte 1 (6.a ed.), Microsoft Press , ISBN 978-0-7356-4873-9
enlaces externos
- Cómo encontrar procesos detrás de svchost.exe
- ScTagQuery
- ¿Qué es Svchost.exe explicado?