Los caminos de Windows, a veces, son inescrutables.

En ocasiones, sin saber por qué, en un servidor en producción un proceso empieza a "comerse" todos los recursos del procesador y no tenemos idea de a qué se puede deber (una actualización, un driver, un programa nuestro que se ha desbocado...). Y lo que es peor: si se trata de algún servicio del sistema lo tenemos más difícil pues todos los procesos de ese estilo se llaman igual: svchost.exe.

svchost-01

svchost.exe es un proceso genérico del sistema que sirve para ejecutar DLLs de Windows. Generalmente contienen servicios. Además para evitar que la caída de un servicio afecte a todo el sistema se lanza un svchost.exe por cada grupo de servicios relacionados. Así, por ejemplo, todos los que tienen que ver con servicios de red van en uno, con seguridad en otro, con IIS en otro, etc...

¿Cómo podemos averiguar cuál es el verdadero servicio que nos está causando el problema?

Existen varias maneras.

1.- La fácil: verlos directamente en el administrador de tareas

A la mayoría de los mortales nos gusta ver de manera gráfica la información y tener una interfaz de usuario para hacer las tareas. Por suerte es muy fácil averiguar esta información tanto en versiones modernas como en versiones antiguas de Windows también.

En primer lugar, en Windows Server 2012 (o Windows 8.x), el administrador de tareas nos da mucha más información con cada proceso, por lo que es muy sencillo:

svchost-05

Pulsa para aumentar

Fíjate en que además de decirnos simplemente que es un "Service host", nos indica también qué servicios corren en ese proceso y podemos desplegarlo para ver el detalle concreto de dichos servicios. Muy útil.

Sin embargo en versiones anteriores de Windows (Windows 7, Windows Server 2008 y 2008 R2, etc...) la información es más escasa y es la que se ve en la primera figura.

En estos sistemas antiguos basta con pulsar con el botón secundario en el proceso svchost.exe desbocado y escoger la opción "Ir al servicio(s)" del menú contextual:

svchost-02

Esto abrirá la pestaña "Servicios" que tendrá seleccionados los servicios que se están ejecutando bajo ese proceso concreto:

svchost-03

De este modo podremos averiguar cuál es el servicio que nos está causando problemas y, si es posible, pararlo o reiniciarlo para solucionar el asunto.

2.- La difícil: listarlos a través de la línea de comandos

Lo anterior está bien en la mayor parte de los casos, pero para los que se sientan más "hackers" y les guste hacerlo desde la línea de comandos o, lo más probable, si utilizas una edición "server core" de Windows, sin interfaz de usuario (que puede ser útil para aprovechar al máximo el hardware en Data Centers y máquinas virtuales de propósito específico), entonces en ese caso debes ir a través de la línea de comandos del sistema.

Primeramente ¿cómo sabes desde línea de comandos que un proceso está apropiándose de la memoria o de la CPU?

Pues por ejemplo usando el comando tasklist con el parámetro /v para que de información detallada de los procesos. Si abrimos una línea de comandos (cmd.exe) y escribimos lo siguiente:

tasklist /v

obtendremos una lista de todos los procesos del sistema que nos mostrará la memoria que están consumiendo y el tiempo que han ocupado en la CPU del sistema desde que se arrancó. No nos dice el % de procesador que está consumiendo de manera instantánea pero ese tiempo de CPU nos permite saber si alguno está acaparando demasiado los recursos del procesador.

Si estamos buscando servicios desbocados será más útil si además le aplicamos un filtro para que solo nos muestre los procesos svchost.exe:

tasklist /v /fi "IMAGENAME eq svchost.exe"

Además podemos volcar esa información a un archivo (e incluso enviárnoslo por email o descargarlo por FTP) para estudiar la información  con más calma si ponemos un "> NombreArchivo.txt" al final.

Una vez ya hemos identificado desde la línea de comandos qué proceso está acaparando recursos, podemos ver con detalle qué servicios tiene dentro usando de nuevo el mismo comando pero con el parámetro /svc que lista los servicios asociados al proceso:

tasklist /svc /fi "IMAGENAME eq svchost.exe"

Con ello obtendremos un listado de todos los procesos de nombre svchost.exe con un detalle de los servicios que contienen:

svchost-04

Con esto podemos ver qué servicios están atados a cada proceso y así identificar los que están dando la lata.

¡Espero que te sea útil!

💪🏻 ¿Este post te ha ayudado?, ¿has aprendido algo nuevo?
Pues NO te pido que me invites a un café... Te pido algo más fácil y mucho mejor