Isso é algo que sempre me incomodou, então vou perguntar à comunidade de Falha no Servidor.
Adoro o Process Explorer por acompanhar mais do que apenas as tarefas de alto nível que você realiza no Gerenciador de Tarefas . Mas eu quero constantemente saber quais dessas dezenas de serviços hospedados em um único processo no svchost estão fazendo meu processador disparar .
Então ... existe alguma maneira não invasiva de descobrir essas informações?
Sim, existe uma maneira (quase) não intrusiva e fácil:
Divida cada serviço para executar em seu próprio processo SVCHOST.EXE e o serviço que consome os ciclos da CPU será facilmente visível no Process Explorer (o espaço após "=" é necessário):
SC Config Servicename Type= own
Faça isso em uma janela de linha de comando ou coloque-o em um script BAT. São necessários privilégios administrativos e uma reinicialização do computador antes que ele entre em vigor.
O estado original pode ser restaurado por:
SC Config Servicename Type= share
Exemplo: para executar a Instrumentação de Gerenciamento do Windows em um SVCHOST.EXE separado:
SC Config winmgmt Type= own
Essa técnica não tem efeitos negativos, exceto talvez aumentando ligeiramente o consumo de memória. Além de observar o uso da CPU para cada serviço, também é fácil observar o delta de falhas de página, a taxa de leitura de E / S do disco e a taxa de gravação de E / S do disco para cada serviço. No Process Explorer, menu Exibir / Selecionar Colunas: guia Memória do Processo / Delta de Falha na Página, guia Desempenho do Processo / Bytes de Gravação Delta IO, guia Desempenho do Processo / Bytes de Leitura Delta IO, respectivamente.
Na maioria dos sistemas, existe apenas um processo SVCHOST.EXE que possui muitos serviços. Eu usei essa sequência (ela pode ser colada diretamente em uma janela de linha de comando):
rem 1. "Automatic Updates"
SC Config wuauserv Type= own
rem 2. "COM+ Event System"
SC Config EventSystem Type= own
rem 3. "Computer Browser"
SC Config Browser Type= own
rem 4. "Cryptographic Services"
SC Config CryptSvc Type= own
rem 5. "Distributed Link Tracking"
SC Config TrkWks Type= own
rem 6. "Help and Support"
SC Config helpsvc Type= own
rem 7. "Logical Disk Manager"
SC Config dmserver Type= own
rem 8. "Network Connections"
SC Config Netman Type= own
rem 9. "Network Location Awareness"
SC Config NLA Type= own
rem 10. "Remote Access Connection Manager"
SC Config RasMan Type= own
rem 11. "Secondary Logon"
SC Config seclogon Type= own
rem 12. "Server"
SC Config lanmanserver Type= own
rem 13. "Shell Hardware Detection"
SC Config ShellHWDetection Type= own
rem 14. "System Event Notification"
SC Config SENS Type= own
rem 15. "System Restore Service"
SC Config srservice Type= own
rem 16. "Task Scheduler"
SC Config Schedule Type= own
rem 17. "Telephony"
SC Config TapiSrv Type= own
rem 18. "Terminal Services"
SC Config TermService Type= own
rem 19. "Themes"
SC Config Themes Type= own
rem 20. "Windows Audio"
SC Config AudioSrv Type= own
rem 21. "Windows Firewall/Internet Connection Sharing (ICS)"
SC Config SharedAccess Type= own
rem 22. "Windows Management Instrumentation"
SC Config winmgmt Type= own
rem 23. "Wireless Configuration"
SC Config WZCSVC Type= own
rem 24. "Workstation"
SC Config lanmanworkstation Type= own
rem End.
Para o pôster que recomendava o script do PowerShell: Eu tentei e ele alterou com êxito todos os meus serviços. No entanto, após a reinicialização, uma caixa de erro apareceu e uma reinicialização foi acionada. Eu tive que restaurar com 'última boa configuração'. Seja cuidadoso.
@ Chris: Eles são protegidos contra adulteração em versões posteriores do Windows; Eu acho que é importante no Windows XP, embora ...
Tamara Wijsman
2
@ Chrisis Obrigado pelo link para a lista de compartilhamento compartilhado! Esse site agora parece estar morto. Por arquivo , a lista era: HTTPFilter, KDC, Netlogon, NTLMssp, PolicyAgent, ProtectedStorage, SamSs, Eventlog, PlugPlay(todos associados lsass.exe)
cxw
2
Embora eu não conheça a maneira fácil de fazer isso diretamente, você pode inferir isso com frequência na página de propriedades do Process Explorer para o processo svchost. A guia Serviços nas propriedades do processo informará quais serviços estão hospedados nesse processo. E a guia Threads mostrará os threads e as pilhas de threads em execução, bem como o uso da CPU. Freqüentemente, o Endereço inicial no encadeamento fornece uma indicação da DLL do ponto de entrada e, por extensão, o serviço que está sendo executado nesse encadeamento. Outras vezes, você pode olhar para a pilha de chamadas do encadeamento e verá o nome do módulo na pilha de chamadas que informa qual parte do código está em execução.
Dmytro, onde posso aprender como usar sua ferramenta de divulgação de serviço? Fiz o download e executei o service_disclosure.exe no Windows 7. Por breves instantes, vi uma janela de comando preta abrir e fechar, mas nada mais parecia acontecer. Isso foi desconcertante! Gostaria de saber o que fez no meu computador e como usar a ferramenta corretamente.
Cuidado: faça a pesquisa, o ponto de restauração e os procedimentos de backup necessários antes de aplicá-lo e verifique se tudo ainda está funcionando depois. É possível recuperar isso por meio do Recovery Environment somente em sistemas não RAID, bem como no Modo de Segurança em sistemas RAID e não RAID. Isso foi testado em uma máquina de desenvolvedor, não em servidores.
No Powershell, você pode fazer isso para todos os serviços não-lsass usando os seguintes comandos:
A lista excluída aqui precisa ser executada em um lsass.exe compartilhado, com exceção do policyagent , necessário para que o agente de política de grupo se comunique adequadamente durante a inicialização.
Também recentemente descobriu que was (Process Activation) e w3svc (IIS World Wide Web) precisam compartilhar seus processos, para que tenham sido adicionados às exclusões.
Este foi testado em Windows 10 (1607, construção de 14.393,953), as exclusões são diferentes em XP, ... .
Não sei se essa ainda é uma pergunta que você deseja respostas, mas, ao solucionar o erro svchost de um cliente, aprendi que existe uma linha de comando para exatamente isso: "tasklist / svc" Ele fornece uma lista completa dos processos em execução, com o ID do processo e os serviços que cada processo está executando. Ele não fornece o uso do processador, mas você pode fechá-los um processo de cada vez pelo ID do processo e aprender pelo menos qual grupo de serviços está entupindo sua CPU.
Atualmente, você pode usar o PowerShell para alterar os tipos de serviço para "Próprio Processo" e ver a memória de cada um individualmente. Esta lista mostra o código completo. A idéia central é tentar alterar o tipo de serviço da maneira menos invasiva para a mais invasiva:
$win32Service =Get-CimInstance-ClassNameWin32_Service-Filter"Name = '$ServiceName'"-Verbose:$falseif($win32Service){if(!(Set-ServiceTypeToOwnProcessByCim $win32Service)){if(!(Set-ServiceTypeToOwnProcessByWindowsRegistry $win32Service)){if(Grant-FullControlRightsOnServiceRegistryKeyToCurrentUser $win32Service){Set-ServiceTypeToOwnProcessByWindowsRegistry $win32Service |Out-Null}}}}
else{Write-Warning"[$ServiceName] Service not found"}
Ao colocar os arquivos Set-ServiceTypeToOwnProcess.ps1e Enable-Privilege.ps1na mesma pasta, você pode executar o script assim:
HTTPFilter, KDC, Netlogon, NTLMssp, PolicyAgent, ProtectedStorage, SamSs, Eventlog, PlugPlay
(todos associadoslsass.exe
)Embora eu não conheça a maneira fácil de fazer isso diretamente, você pode inferir isso com frequência na página de propriedades do Process Explorer para o processo svchost. A guia Serviços nas propriedades do processo informará quais serviços estão hospedados nesse processo. E a guia Threads mostrará os threads e as pilhas de threads em execução, bem como o uso da CPU. Freqüentemente, o Endereço inicial no encadeamento fornece uma indicação da DLL do ponto de entrada e, por extensão, o serviço que está sendo executado nesse encadeamento. Outras vezes, você pode olhar para a pilha de chamadas do encadeamento e verá o nome do módulo na pilha de chamadas que informa qual parte do código está em execução.
fonte
Experimente a ferramenta de divulgação de serviço . Isto:
Seus comentários e sugestões são bem vindos.
@ Peter Mortensen: Obrigado pela idéia.
fonte
No Powershell, você pode fazer isso para todos os serviços não-lsass usando os seguintes comandos:
A lista excluída aqui precisa ser executada em um lsass.exe compartilhado, com exceção do policyagent , necessário para que o agente de política de grupo se comunique adequadamente durante a inicialização.
Também recentemente descobriu que was (Process Activation) e w3svc (IIS World Wide Web) precisam compartilhar seus processos, para que tenham sido adicionados às exclusões.
Este foi testado em Windows 10 (1607, construção de 14.393,953), as exclusões são diferentes em XP, ... .
fonte
Não sei se essa ainda é uma pergunta que você deseja respostas, mas, ao solucionar o erro svchost de um cliente, aprendi que existe uma linha de comando para exatamente isso: "tasklist / svc" Ele fornece uma lista completa dos processos em execução, com o ID do processo e os serviços que cada processo está executando. Ele não fornece o uso do processador, mas você pode fechá-los um processo de cada vez pelo ID do processo e aprender pelo menos qual grupo de serviços está entupindo sua CPU.
fonte
Atualmente, você pode usar o PowerShell para alterar os tipos de serviço para "Próprio Processo" e ver a memória de cada um individualmente. Esta lista mostra o código completo. A idéia central é tentar alterar o tipo de serviço da maneira menos invasiva para a mais invasiva:
Ao colocar os arquivos
Set-ServiceTypeToOwnProcess.ps1
eEnable-Privilege.ps1
na mesma pasta, você pode executar o script assim:fonte