Come diagnosticare l'utilizzo anormale della CPU da svchost.exe? [duplicare]


19

Ho un laptop con un sistema Win 7 a 32 bit alimentato da un Pentium dual-core (è un laptop 2010). A volte funziona bene, ma di solito gira al minimo con un carico della CPU del 100%. La CPU è consumata da due processi svchost.exe (50% ciascuno). Per quanto ho capito, questo è un host di servizio. C'è un modo per scoprire quale servizio è il colpevole?

Nota: questo accade anche in modalità provvisoria.


1
È possibile utilizzare Process Explorer per esaminare i servizi in esecuzione nelle due istanze di svchost ( technet.microsoft.com/en-us/sysinternals/processexplorer.aspx )
Yorik

@Yorik: ci ho pensato, ma ProcessExplorer non ha mostrato nulla di utile.
Violet Giraffe

5
In Windows 7, direi che attualmente> 90% dei problemi della CPU svchost sono correlati al servizio Windows Update. In caso di problemi reali nell'aggiornamento di un sistema (che può essere difficile in una nuova installazione con un vecchio processore), provare a installare KB3050265, KB3138612 e KB3145739 senza una connessione di rete. Quindi riavviare e cercare gli aggiornamenti.
ontrack

@Controllo: interessante. In realtà, penso che il controllo degli aggiornamenti sia disabilitato su questa macchina, probabilmente non è mai stato aggiornato dal 2010 o dal 2012. E non ho alcun desiderio di installare aggiornamenti, ho solo bisogno di risolvere il problema della CPU. Se hai ragione, semplicemente disabilitando il servizio di Windows Update sarà di aiuto?
Violet Giraffe

questo è stato chiesto così tante volte. vedi dup. Probabilmente vedi il problema relativo alla scansione della WU. Risolvilo dai passaggi nella mia risposta: superuser.com/a/996072/174557
magicandre1981

Risposte:


28

Come istanza di svchost.exe ospita più servizi di sistema, ecco come separare i servizi, ciascuno nella propria istanza di svchost.exe, in modo da scoprire quale servizio consuma la CPU.

La procedura è la seguente :

  1. Utilizzare Task Manager per mostrare tutti i processi ordinati per CPU decrescente e contrassegnare il PID dei processi che consumano la CPU

  2. In un prompt dei comandi (cmd) immettere il comando
    Tasklist /svc /fi "IMAGENAME eq svchost.exe"
    inserisci qui la descrizione dell'immagine

  3. Le istanze problematiche di svchost.exe ora possono essere individuate dal loro PID e sulla destra troverai un elenco dei servizi di sistema che ospitano

  4. Per ciascuno dei nomi nell'elenco, immettere il seguente comando in un prompt dei comandi (cmd) che è Esegui come amministratore:
    sc config <name> type= own
    (Notare lo spazio tra '=' e 'proprio')

  5. Reboot

I servizi di sistema separati verranno eseguiti ciascuno nella propria istanza di svchost.exe e possono essere visualizzati in Task Manager nella scheda Processi. È possibile fare clic con il pulsante destro del mouse su un'istanza e selezionare "Vai a servizio / i" per accedere direttamente al servizio o utilizzare nuovamente il comando elenco attività.

Per ulteriori informazioni, consultare l'articolo Microsoft
Introduzione alla risoluzione dei problemi SVCHOST.EXE .


7

Process Explorer lo rende facile. Ho confermato che funziona con Process Explorer v16.20 su Windows 7 Professional a 64 bit e Windows 10 Pro a 64 bit.

  1. Esegui Process Explorer elevato.
  2. Individua un svchost.exeprocesso con un valore elevato (o anche solo misurabile / non vuoto) nella CPUcolonna. L'ordinamento per colonna Processo CPUpuò aiutare con questo.
  3. Fare clic con il tasto destro del mouse sul svchost.exeprocesso e selezionare Properties....
  4. Nella finestra delle proprietà del processo, selezionare la Threadsscheda. Verranno visualizzati tutti i thread in questo processo.
  5. Individua un thread con un valore elevato (o, ancora, solo misurabile / non vuoto) nella CPUcolonna. L'ordinamento per CPUcolonna può essere di aiuto.Scheda Discussioni del processo Process Explorer
  6. La Servicecolonna mostrerà il nome del servizio in cui quel thread è in esecuzione.

Se il nome del servizio non ti è familiare ...

  1. Nella finestra delle proprietà del processo, selezionare la Servicesscheda. Verranno visualizzati tutti i servizi eseguiti in questo processo.
  2. Abbina la Servicecolonna nella Servicesscheda al valore della Servicecolonna nella Threadsscheda che hai individuato nel passaggio 6.Scheda Servizi processo Process Explorer
  3. La Display Namecolonna mostrerà il nome descrittivo del servizio. La descrizione del servizio selezionato verrà visualizzata sotto l'elenco dei servizi.

Ah, non sapevo di quelle funzioni avanzate di Process Explorer. Grazie.
Violet Giraffe

3

È possibile utilizzare Task Manager . Esistono altri modi (riga di comando o addirittura scrivere qualche programma usando WinAPI ), ma non ne discuterò qui. Prima di proseguire, l'utente dovrebbe disporre dei privilegi di amministratore.

Nella scheda Processi :

  • Seleziona Mostra processi da tutti gli utenti .
  • Fare clic destro sulla processi "intestazione della tabella" (che contiene i nomi delle colonne come nome Immagine , PID , Nome utente , CPU , ...), e selezionare Seleziona colonne ... .
    • Nella finestra di dialogo che appare, scorrere verso il basso e assicurarsi di selezionare Riga di comando e PID (Process Identifier), quindi premere OK .
  • Torna alla scheda Processi , fai clic sull'intestazione della colonna CPU in modo che i processi vengano ordinati in base al loro consumo di CPU (nota che i processi potrebbero essere visualizzati in ordine crescente / decrescente - ogni clic sulla CPU cambia gli ordini), fai clic fino a quando i 2 processi appare nella parte superiore della tabella. Ora puoi vedere la loro riga di comando (non lo so, ma ho la sensazione che uno di questi sia netsvcs(Servizi di rete)) e anche i loro PID.

  • Successivamente, è necessario abbinare i 2 processi ai servizi. Per questo puoi sia:

    • Fare clic destro su di essi e quindi Vai a servizio di (s) ... . Questo passerà alla scheda Servizi , con tutto il servizio in esecuzione in quel processo selezionato (per questa opzione non è necessario alcuno dei passaggi precedenti :)).
    • Apri lo snap-in Servizi in mmc . Quando si esegue il doppio clikcing su un servizio (ha senso solo verificare quelli in esecuzione), in Percorso dell'eseguibile è possibile vedere la riga di comando su cui è necessario eseguire la corrispondenza.
  • Su W10 puoi visualizzare le informazioni esatte di cui hai bisogno da Resource Monitor (puoi avviarlo da Task Manager , scheda Prestazioni ). Qui vai alla scheda CPU e vengono elencati i servizi e il loro consumo di CPU.

EDIT0 : risposta aggiornata per fornire un approccio più semplice (e molto più sensato), invece di grattarmi il lato destro della testa usando il mio stile della mano sinistra , che inizialmente ho pubblicato.


Non ho mai notato che puoi vedere la riga di comando, pulito! Non semplice come la risposta di Harry, ma buono a sapersi.
Violet Giraffe

Task Manager può farlo da solo. Se viene selezionato un processo svchost quando si passa alla scheda Servizi, i servizi in esecuzione in tale processo verranno selezionati lì.
Simon Richter,

1
Veramente? Su W10 questo non accade (almeno quando c'è già qualche servizio già selezionato). L'unico modo è facendo clic sul processo, quindi scegliere Vai ai servizi (opzione che ho perso - molto probabilmente esiste anche in W7 ). Purtroppo non sono in grado di verificare.
CristiFati,

1
@CristiFati questa opzione esiste da Windows Vista (fonte: technet.microsoft.com/en-us/library/ff642468.aspx ), probabilmente dovresti aggiungerla alla tua risposta invece della corrispondenza PID a mano
Vasily Alexeev
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.