Como diagnosticar o uso anormal da CPU por svchost.exe? [duplicado]

19

Eu tenho um laptop com um sistema Win 7 de 32 bits equipado com um Pentium de núcleo duplo (é um laptop de 2010). Às vezes, funciona bem, mas geralmente fica ocioso com 100% de carga da CPU. A CPU é consumida por dois processos svchost.exe (50% cada). Tanto quanto eu entendo, este é um host de serviço. Existe alguma maneira de descobrir qual serviço é o culpado?

Nota: isso acontece mesmo no modo de segurança.

Girafa violeta
fonte
1
Você pode usar o Process Explorer para olhar para os serviços que estão sendo executados sob as duas instâncias svchost ( technet.microsoft.com/en-us/sysinternals/processexplorer.aspx )
Yorik
@Yorik: Pensei nisso, mas o ProcessExplorer não mostrou nada de útil.
Giraffe Violet 24/03
5
No Windows 7, eu diria que atualmente> 90% dos problemas de CPU do svchost estão relacionados ao serviço Windows Update. Se você tiver problemas para atualizar um sistema (o que pode ser difícil em uma instalação nova com um processador antigo), tente instalar os arquivos KB3050265, KB3138612 e KB3145739 sem uma conexão de rede. Em seguida, reinicie e procure por atualizações.
ontrack 24/03
@ ontrack: Interessante. Na verdade, acho que a verificação de atualizações está desabilitada nesta máquina, provavelmente nunca foi atualizada desde 2010 ou 2012. E não tenho vontade de instalar atualizações, só preciso corrigir o problema da CPU. Se você estiver certo, simplesmente desabilitará a ajuda do serviço Windows Update?
Girafa violeta
isso foi solicitado tantas vezes. veja dup. Você provavelmente vê o problema da digitalização da WU. Resolvê-lo de passos em minha resposta: superuser.com/a/996072/174557
magicandre1981

Respostas:

28

Como uma instância do svchost.exe hospeda vários serviços do sistema, veja como separar os serviços, cada um com sua própria instância do svchost.exe, para descobrir qual serviço consome a CPU.

O procedimento é o seguinte:

  1. Use o Gerenciador de tarefas para mostrar todos os processos classificados por CPU decrescente e marcar o PID dos processos que consomem a CPU

  2. Em um prompt de comando (cmd), digite o comando
    Tasklist /svc /fi "IMAGENAME eq svchost.exe"
    insira a descrição da imagem aqui

  3. As instâncias problemáticas do svchost.exe agora podem ser localizadas pelo respectivo PID e, à direita, você encontrará uma lista dos serviços do sistema que eles hospedam

  4. Para cada um dos nomes da lista, digite o seguinte comando em um Prompt de Comando (cmd) que é Executar como administrador:
    sc config <name> type= own
    (Observe o espaço entre '=' e 'próprio')

  5. Reiniciar

Os serviços do sistema que você separou agora serão executados em sua própria instância do svchost.exe e podem ser vistos no Gerenciador de Tarefas na guia Processos. Você pode clicar com o botão direito do mouse em uma instância e selecionar "Ir para o (s) Serviço (s)" para ir diretamente ao serviço ou usar novamente o comando tasklist.

Para obter mais informações, consulte o artigo da Microsoft
Introdução à solução de problemas do SVCHOST.EXE .

harrymc
fonte
7

O Process Explorer facilita isso. Confirmei que isso funciona com o Process Explorer v16.20 no Windows 7 Professional de 64 bits e no Windows 10 Pro de 64 bits.

  1. Execute o Process Explorer elevado.
  2. Localize um svchost.exeprocesso com um valor alto (ou mesmo mensurável / não em branco) na CPUcoluna. A classificação pela coluna Processou CPUpode ajudar nisso.
  3. Clique com o botão direito do mouse no svchost.exeprocesso e selecione Properties....
  4. Na janela de propriedades do processo, selecione a Threadsguia Todos os threads neste processo serão exibidos.
  5. Localize um encadeamento com um valor alto (ou, novamente, apenas mensurável / não em branco) na CPUcoluna. A classificação pela CPUcoluna pode ajudar nisso.Guia Threads do processo do Process Explorer
  6. A Servicecoluna mostrará o nome do serviço no qual esse encadeamento está sendo executado.

Se o nome do serviço não lhe for familiar ...

  1. Na janela de propriedades do processo, selecione a Servicesguia Todos os serviços executados nesse processo serão exibidos.
  2. Corresponda a Servicecoluna na Servicesguia ao valor da Servicecoluna na Threadsguia localizada na etapa 6.Guia Serviços de processo do Process Explorer
  3. A Display Namecoluna exibirá o nome amigável do serviço. A descrição do serviço selecionado aparecerá abaixo da lista de serviços.
BACON
fonte
Ah, eu não sabia sobre essas funções avançadas do Process Explorer. Obrigado.
Violet Giraffe
3

Você pode usar o Gerenciador de tarefas . Existem outras maneiras (linha de comando ou até mesmo escrever algum programa usando o WinAPI ), mas não vou discuti-las aqui. Antes de prosseguir, seu usuário deve ter privilégios administrativos.

Na guia Processos :

  • Marque Mostrar processos de todos os usuários .
  • Botão direito do mouse sobre o processos "cabeçalho da tabela" (que contém os nomes das colunas como nome da imagem , PID , Nome de Usuário , CPU , ...), e selecione Selecionar colunas ... .
    • Na caixa de diálogo exibida, role para baixo e verifique a linha de comando e o PID (identificador de processo) e pressione OK .
  • De volta à guia Processos , clique no cabeçalho da coluna CPU para que os processos sejam ordenados pelo consumo de CPU (observe que os processos podem ser exibidos em ordem crescente / decrescente - cada clique na CPU alterna os pedidos), clique até os 2 processos aparecem na parte superior da tabela. Agora você pode ver a linha de comando (não sei, mas sinto que um deles é netsvcs(Serviços de Rede)) e também os PIDs.

  • Em seguida, você precisa associar os 2 processos aos serviços. Para isso, você pode:

    • Botão direito do mouse sobre eles e, em seguida, Ir para o serviço (s) ... . Isso será movido para a guia Serviços , com todos os serviços em execução nesse processo selecionados (para esta opção, você não precisa das etapas anteriores :)).
    • Abra o snap-in Serviços em mmc . Ao clicar duas vezes em um serviço (só faz sentido verificar os que estão sendo executados), em Caminho para executável, você pode ver a linha de comando na qual você deve fazer a correspondência.
  • No W10, você pode visualizar as informações exatas necessárias no Monitor de Recursos (você pode iniciá-lo no Gerenciador de Tarefas , guia Desempenho ). Lá você vai para a guia CPU e os serviços e seu consumo de CPU são listados.

EDIT0 : Resposta atualizada para fornecer uma abordagem mais simples (e fazendo muito mais sentido), em vez de coçar a cabeça direita usando o estilo esquerdo , que publiquei inicialmente.

CristiFati
fonte
Eu nunca notei que você pode ver a linha de comando, pura! Não é tão direto quanto a resposta de harrymc, mas é bom saber.
Girafa Violeta
O Gerenciador de tarefas pode fazer isso por conta própria. Se um processo svchost for selecionado ao alternar para a guia Serviços, os serviços em execução nesse processo serão selecionados lá.
Simon Richter
1
Sério? No W10, isso não acontece (pelo menos quando já há algum serviço selecionado). A única maneira é clicar com o mouse no processo e, em seguida, escolher Ir para o (s) serviço (s) (opção que eu perdi - provavelmente existe no W7 também). Infelizmente não consigo verificar.
CristiFati 25/03
1
@CristiFati essa opção existe desde o Windows Vista (fonte: technet.microsoft.com/en-us/library/ff642468.aspx ), você provavelmente deve adicioná-lo à sua resposta em vez da correspondência PID manualmente
Vasily Alexeev