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

19

Eu tenho um laptop com um sistema Win 7 de 32 bits equipado com um Pentium de dois núcleos (é um laptop de 2010). Às vezes funciona bem, mas normalmente fica ocioso a 100% da 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?

De nota: isso acontece até mesmo no modo de segurança.

    
por Violet Giraffe 24.03.2017 / 21:49

3 respostas

28

Como uma instância do svchost.exe hospeda vários serviços do sistema, aqui está como para separar os serviços, cada um para sua própria instância de 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 descendente e marque 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"

  3. Asinstânciasproblemáticasdosvchost.exeagorapodemserlocalizadaspeloPIDeàdireitavocêencontraráumalistadosserviçosdosistemaqueeleshospedam

  4. Paracadaumdosnomesnalista,digiteoseguintecomandoemumPromptdecomando(cmd)executadocomoadministrador:
    scconfig<name>type=own
    (Observeoespaçoentre‘=’e‘own’)

  5. Reinicializar

Osserviçosdosistemaquevocêseparouagoraserãoexecutadosemsuaprópriainstânciadesvchost.exeepodeservistonoGerenciadordeTarefasnaguiaProcessos.Vocêpodeclicarcomobotãodireitodomouseemumainstânciaeselecionar"Ir para 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 à resolução de problemas do SVCHOST.EXE .

    
por 24.03.2017 / 22:19
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 processo svchost.exe com um valor alto (ou mesmo apenas mensurável / não em branco) na coluna CPU . A classificação pela coluna Process ou CPU pode ajudar nisso.
  3. Clique com o botão direito do mouse no processo svchost.exe e selecione Properties... .
  4. Na janela de propriedades do processo, selecione a guia Threads . Todos os threads neste processo serão exibidos.
  5. Localize um segmento com um valor alto (ou, novamente, apenas mensurável / não em branco) na coluna CPU . A classificação pela coluna CPU pode ajudar nisso.
  6. A coluna Service mostrará o nome do serviço no qual esse segmento está sendo executado.

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

  1. Na janela de propriedades do processo, selecione a guia Services . Todos os serviços executados neste processo serão exibidos.
  2. Corresponde a coluna Service na guia Services ao valor da coluna Service na guia Threads localizada na etapa 6.
  3. A coluna Display Name exibirá o nome amigável do serviço. A descrição do serviço selecionado aparecerá abaixo da lista de serviços.
por 25.03.2017 / 02:28
3

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

No separador Processos :

  • Verifique Mostrar processos de todos os usuários .
  • Clique com o botão direito do mouse nos processos "cabeçalho da tabela" (que contém nomes de colunas como Nome da imagem , PID , Nome do usuário , CPU , ...) e selecione Selecionar colunas ... .
    • Na caixa de diálogo exibida, role a tela para baixo e verifique se Linha de comando e PID (Identificador de processo) pressione OK
  • Voltar para a 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 em CPU muda as ordens), clique até que os 2 processos apareçam no topo da tabela. Agora você poderá ver a linha de comando (não sei, mas tenho a sensação de que um deles é netsvcs (Network Services)) e também seus PIDs.

  • Em seguida, você precisa combinar os dois processos com os serviços. Para isso, você pode:

    • Clique com o botão direito do mouse sobre eles e, em seguida, Vá para o (s) serviço (s) ... . Isso passará para a guia Serviços , tendo todo o serviço em execução nesse processo selecionado (para essa opção, você não precisa de nenhuma das etapas anteriores :)).
    • Abra o snap-in Serviços em mmc . Quando clikc-ing duplo em um serviço (só faz sentido para verificar os que estão em execução), em Caminho para o executável você pode ver sua linha de comando que você deve fazer a correspondência.
  • Em W10 você pode visualizar as informações exatas que você precisa do Monitor de Recursos (você pode iniciá-lo em Gerenciador de Tarefas , Desempenho aba ). Lá você vai para a aba CPU e os serviços e seu consumo de CPU são listados.

EDIT0 : Resposta atualizada para fornecer uma abordagem mais simples (e com mais sentido), em vez de riscar meu lado direito usando minha mão esquerda estilo um, que eu inicialmente publicado.

    
por 24.03.2017 / 22:25