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