Cuando tenemos algún problema con el proceso svchost.exe de una máquina, ya sea por ejemplo, por consumos de CPU o memoria elevados, vemos que se complica el poder identificar quien es el causante del problema debido a que svchost es un proceso genérico utilizado por Windows para la ejecución de servicios.
Se nos puede dar un caso como el que muestra la siguiente imagen, con un consumo elevado del proceso svchost en el Administrador de tareas del servidor
El problema que tenemos es que suelen ejecutarse varias instancias del proceso svchost.exe
Y no solo tenemos el problema de tener varias instancias. Aunque identifiquemos el proceso que tiene los problemas, por como está implementado, en cada proceso svchost.exe puede que se estén ejecutando varios servicios, por lo que aunque tengamos el proceso svcshot.exe identificado que genera los problemas, nos faltaría todavía por identificar cual de los servicios asociados a esa instancia está generando los problemas.
Si accedemos a HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Svchost podemos ver los distintos servicios asociados a cada uno de los procesos
Otra opción de ver que servicios están asociados a cada proceso es mediante el comando tasklist.
Si ejecutamos tasklist /SVC /FI “IMAGENAME eq svchost.exe” obtenemos la siguiente salida
De esta forma podemos identificar mediante el PID del proceso cuales son los servicios que se están ejecutando en él.
Para poder centrar el problema en el servicio que genera el consumo excesivo tenemos que aislar los servicios en distintos procesos y para ello tenemos principalmente dos opciones.
Método 1
Por ejemplo: tenemos un problema de consumo elevado de memoria con el proceso svchost.exe con PID 2276 de la imagen anterior. Vemos que tiene varios servicios asociados por lo que para identificar cual es el que está generando el problema vamos a aislar los servicios asociados a él.
Para ello ejecutamos:
1 |
sc config SERVICIO type= own |
(Hay un espacio entre “=” y “own”)
Si queremos aislar el servicio de Windows Update ejecutamos
1 |
sc config wuauserv type= own |
Reiniciamos el servicio y comprobamos que ahora el servicio Windows Update (wuauserv) se ejecuta en otro proceso svchost.exe
Podemos seguir este procedimiento con el resto de servicios del proceso problemático hasta detectar cual es el servicio que está generando los problemas. Iremos aislando los servicios hasta detectar que, por ejemplo, el servicio que provoca el elevado consumo de memoria es el servicio Winmgmt (WMI)
Para restaurar los cambios tenemos que ejecutar el siguiente comando, para cada uno de los servicios que hemos aislado
1 |
sc config SERVICIO type= share |
(Hay un espacio entre “=” y “share”)
Tras este cambio es necesario reiniciar el equipo.
Si queremos volver a ejecutar en el proceso del grupo el servicio de Windows Update ejecutamos
1 |
sc config wuauserv type= share |
Método 2
El objetivo es separar los servicios pero en este caso lo que vamos a hacer es crear através del registro una nueva instancia de svchost.exe (Primero hacemos un backup de las claves que modificamos)
- Crear un nuevo valor REG_MULTI_SZ de nombre WindowsUpdate en la clave HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Svchost.
- Añadir el nombre del servicio (en este caso wuauserv) al valor creado.
- También es necesario borrar wuauserv de la lista de HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Svchost\Netsvcs.
- Accedemos a la clave HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\wuauserv y cambiamos ImagePath de %systemroot%\system32\svchost.exe -k netsvcs a: %systemroot%\system32\svchost.exe -k WindowsUpdate
- Reiniciamos el servicio de Windows Updates y comprobamos que se ha creado una instancia de SVCHOST.EXE que solo contiene el servicio de Windows Update
- Repetimos los pasos anteriores para cada uno de los servicios que queramos aisla
- Para volver a la situación original restauramos el registro de backup
Te ha gustado la entrada SGUENOS EN TWITTER O INVITANOS A UN CAFE?