Friday, August 29, 2008

Desentrañando los misterios de svchost.exe

Un vistazo a la sección Procesos del Administrador de tareas de Windows es suficiente para ver un número importante de instancias del programa svchost.exe en ejecución. Esto puede preocuparnos si no conocemos qué es lo que hace ese programa y por qué está tantas veces; especialmente por que algunas de esas instancias pueden consumir gran cantidad de memoria o uso del procesador. En esta nota se explica la función que cumple este programa y cómo monitorear su funcionamiento.

Según explica Microsoft, svchost.exe es un proceso anfitrión genérico para servicios que corren desde bibliotecas de vinculación dinámica (DLLs). ¿Y eso qué quiere decir?

Hace algún tiempo, Microsoft comenzó a mover toda la funcionalidad de los servicios internos de Windows a archivos .dll desde los archivos .exe. Desde una perspectiva de programación, esta estrategia es más adecuada para lograr la reusabilidad, pero el problema es que no se puede ejecutar una dll directamente desde Windows, sino que debe cargarse mediante la ejecución de un programa ejecutable (.exe). Es por esa razón que se creó el proceso svchost.exe

¿Por qué suele haber tantas instancias de svchost.exe en ejecución? Si alguna vez miró a la sección Servicios del Panel de control, habrá observado que hay un número importante de servicios que son requeridos por Windows. Si todos ellos corrieran bajo una misma instancia de svchost.exe, una falla en cualquiera de ellos podría hacer caer a todo el sistema operativo. Es por eso que se separan en distintos procesos.

Los servicios se organizan en grupos lógicos, y luego una instancia de svchost.exe se crea para cada grupo. Por ejemplo, una instancia de svchost.exe corre los tres servicios relacionados con el Firewall de Windows. Otra instancia podría correr todos los servicios relacionados con la interfaz de usuario, etc.

¿Qué puede hacerse al respecto? Por un lado, reducir la cantidad de servicios en ejecución, inhabilitando los que definitivamente no hagan falta. Adicionalmente, si se observa que una instancia de svchost.exe está haciendo un uso demasiado intenso del procesador, puede ser conveniente reiniciar los servicios que corren bajo esa instancia.

El mayor problema es identificar qué servicios están corriéndose dentro de una instancia particular de svchost.exe.

Verificación desde la línea de comandos (Windows Vista o XP)
Para ver qué servicios alberga una instancia particular de svchost.exe, puede usarse el comando tasklist desde una ventana del intérprete de comandos.

tasklist /SVC

El problema de usar este comando consiste en que probablemente no se sepa a qué se refieren los nombres crípticos que muestra. Para Windows Vista existe una mejor alternativa que el comando tasklist.

En la lista de procesos del Administrador de tareas de Windows Vista puede hacer clic con el botón secundario del mouse y luego elegir la opción Ir al servicio para pasar a la sección Servicios, en la cual aparecerán seleccionados aquellos servicios que corren dentro de la instancia de svchost.exe seleccionada.

Lo más interesante de este método es que puede verse el nombre real del servicio en la columna Descripción, lo cual facilita deshabilitar aquellos servicios que no sea necesario mantener en ejecución.

No comments: