¿Cómo diagnosticar el uso anormal de la CPU por svchost.exe? [duplicar]

19

Tengo una computadora portátil con un sistema Win 7 de 32 bits alimentado por un Pentium de doble núcleo (es una computadora portátil 2010). A veces funciona bien, pero generalmente está inactivo al 100% de la carga de la CPU. La CPU es consumida por dos procesos svchost.exe (50% cada uno). Por lo que yo entiendo, este es un host de servicio. ¿Hay alguna manera de averiguar qué servicio es el culpable?

De nota: esto sucede incluso en modo seguro.

Jirafa violeta
fuente
1
Puede usar el explorador de procesos para ver los servicios que se ejecutan en las dos instancias de svchost ( technet.microsoft.com/en-us/sysinternals/processexplorer.aspx )
Yorik
@Yorik: Pensé en eso, pero ProcessExplorer no mostró nada útil.
Violet Giraffe
55
En Windows 7, diría que actualmente> 90% de los problemas de la CPU svchost están relacionados con el servicio de actualización de Windows. Si tiene problemas reales para actualizar un sistema (lo que puede ser difícil en una instalación nueva con un procesador antiguo), intente instalar KB3050265, KB3138612 y KB3145739 sin una conexión de red. Luego reinicie y busque actualizaciones.
ontrack
@ontrack: Interesante. En realidad, creo que la búsqueda de actualizaciones está deshabilitada en esta máquina, probablemente nunca se actualizó desde 2010 o 2012. Y no deseo instalar actualizaciones, solo necesito solucionar el problema de la CPU. Si tiene razón, ¿simplemente deshabilitará la ayuda del servicio de actualización de Windows?
Violet Giraffe
Esto fue preguntado muchas veces. ver dup. Es probable que vea el problema de WU scnaning. Resolverlo de pasos en mi respuesta: superuser.com/a/996072/174557
magicandre1981

Respuestas:

28

Como una instancia de svchost.exe aloja múltiples servicios del sistema, a continuación se explica cómo separar los servicios, cada uno a su propia instancia de svchost.exe, para descubrir qué servicio consume la CPU.

El procedimiento es el siguiente :

  1. Use el Administrador de tareas para mostrar todos los procesos ordenados por CPU descendente y marque el PID de los procesos que consumen la CPU

  2. En un símbolo del sistema (cmd) ingrese el comando
    Tasklist /svc /fi "IMAGENAME eq svchost.exe"
    ingrese la descripción de la imagen aquí

  3. Las instancias problemáticas de svchost.exe ahora se pueden ubicar por su PID y a la derecha encontrará una lista de los servicios del sistema que alojan

  4. Para cada uno de los nombres en la lista, ingrese el siguiente comando en un Símbolo del sistema (cmd) que se ejecuta como administrador:
    sc config <name> type= own
    (Tenga en cuenta el espacio entre '=' y 'propio')

  5. Reiniciar

Los servicios del sistema que separó ahora se ejecutarán en su propia instancia de svchost.exe y se pueden ver en el Administrador de tareas en la pestaña Procesos. Puede hacer clic con el botón derecho en una instancia y seleccionar "Ir a los servicios" para ir directamente al servicio, o usar nuevamente el comando de lista de tareas.

Para obtener más información, consulte el artículo de Microsoft
Introducción a SVCHOST.EXE Solución de problemas .

harrymc
fuente
7

Process Explorer lo hace fácil. He confirmado que esto funciona con Process Explorer v16.20 en Windows 7 Professional de 64 bits y Windows 10 Pro de 64 bits.

  1. Ejecute Process Explorer elevado.
  2. Localice un svchost.exeproceso con un valor alto (o incluso solo medible / no en blanco) en la CPUcolumna. Ordenar por la columna Processo CPUpuede ayudar con esto.
  3. Haga clic derecho en el svchost.exeproceso y seleccione Properties....
  4. En la ventana de propiedades del proceso, seleccione la Threadspestaña. Se mostrarán todos los hilos en este proceso.
  5. Ubique un hilo con un valor alto (o, nuevamente, solo medible / no en blanco) en la CPUcolumna. Ordenar por la CPUcolumna puede ayudar con esto.Pestaña Explorador de procesos
  6. La Servicecolumna mostrará el nombre del servicio en el que se ejecuta ese hilo.

Si el nombre del servicio no le es familiar ...

  1. En la ventana de propiedades del proceso, seleccione la Servicespestaña. Se mostrarán todos los servicios que se ejecutan en este proceso.
  2. Haga coincidir la Servicecolumna en la Servicespestaña con el valor de la Servicecolumna en la Threadspestaña que encontró en el paso 6.Procesador de procesos pestaña Servicios de proceso
  3. La Display Namecolumna mostrará el nombre descriptivo del servicio. La descripción del servicio seleccionado aparecerá debajo de la lista de servicios.
TOCINO
fuente
Ah, no sabía sobre esas funciones avanzadas de Process Explorer. Gracias.
Violet Giraffe
3

Puedes usar el Administrador de tareas . Hay otras formas (línea de comando, o incluso escribir algún programa usando WinAPI ), pero no las discutiré aquí. Antes de continuar, su usuario debe tener privilegios administrativos.

En la pestaña Procesos :

  • Marque Mostrar procesos de todos los usuarios .
  • Haz clic derecho en los procesos de "cabecera de la tabla" (que contiene los nombres de columna como el nombre de la imagen , PID , Nombre de Usuario , CPU , ...), y seleccione Seleccionar columnas ... .
    • En el cuadro de diálogo que aparece, desplácese hacia abajo y asegúrese de marcar la línea de comando y PID (identificador de proceso) y luego presione OK .
  • Vuelva a la pestaña Procesos , haga clic en el encabezado de la columna de la CPU para que los procesos se ordenen según su consumo de CPU (tenga en cuenta que los procesos pueden mostrarse en orden ascendente / descendente; cada clic en la CPU cambia los pedidos), haga clic hasta que los 2 procesos aparecer en la parte superior de la tabla. Ahora puede ver su línea de comando (no lo sé, pero tengo la sensación de que uno de ellos es netsvcs(Servicios de red)) y también sus PID.

  • A continuación, debe hacer coincidir los 2 procesos con los servicios. Para eso puedes:

    • Haga clic derecho sobre ellos y luego ir al servicio (s) ... . Esto se moverá a la pestaña Servicios , con todos los servicios en ejecución en ese proceso seleccionados (para esta opción no necesita ninguno de los pasos anteriores :)).
    • Abra el complemento Servicios en mmc . Cuando haga doble clic en un servicio (solo tiene sentido verificar los que se están ejecutando), en Ruta al ejecutable puede ver su línea de comando en la que debe hacer la coincidencia.
  • En W10 puede ver la información exacta que necesita desde el Monitor de recursos (puede iniciarla desde el Administrador de tareas , pestaña Rendimiento ). Allí vas a la pestaña CPU y se enumeran los servicios y su consumo de CPU.

EDITAR0 : respuesta actualizada para proporcionar un enfoque más simple (y con mucho más sentido), en lugar de rascarme la cabeza derecha con el estilo de la mano izquierda , que inicialmente publiqué.

CristiFati
fuente
¡Nunca me di cuenta de que puedes ver la línea de comando, ordenada! No es tan sencillo como la respuesta de harrymc, pero es bueno saberlo.
Violet Giraffe
El Administrador de tareas puede hacerlo solo. Si se selecciona un proceso svchost al cambiar a la pestaña Servicios, los servicios que se ejecutan en ese proceso se seleccionarán allí.
Simon Richter
1
De Verdad? En W10 esto no sucede (al menos cuando ya hay algún servicio seleccionado). La única forma es haciendo clic en el proceso, y luego elija Ir a los servicios (opción que me perdí, lo más probable es que también exista en W7 ). Lamentablemente no puedo comprobarlo.
CristiFati
1
@CristiFati esta opción ha existido desde Windows Vista (fuente: technet.microsoft.com/en-us/library/ff642468.aspx ), probablemente debería agregarla a su respuesta en lugar de la coincidencia PID a mano
Vasily Alexeev