Para qualquer pessoa (como eu) com o mesmo problema: - Gerenciador de tarefas do Windows -> Desempenho (guia) -> Monitor de recursos (botão) - E você obtém svchost.exe dividido por serviço No Windows 7
Oliver
1
O @Oliver Resource Monitor mostra a CPU por serviço, mas esta pergunta é sobre Memória.
Aidan Ryan
Você pode ver um script para verificar a memória de serviços individuais nesta resposta do SO .
Rosberg Linhares
@RosbergLinhares esse script é equivalente ao de PeterMortensen #
Aidan Ryan #
@AidanRyan, para mim, o script de PeterMortensen não funcionou com os serviços Schedule e gpsvc.
Rosberg Linhares
Respostas:
51
Existe uma maneira fácil de obter as informações solicitadas (mas exige uma pequena alteração no seu sistema):
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 Gerenciador de Tarefas ou 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-a em um script BAT. São necessários privilégios administrativos e é necessário reiniciar o 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 os usuários do PowerShell por aí: Get-Service | ForEach-Object {C: \ Windows \ System32 \ SC.EXE config-$ _ tipo name = própria.}
Tamara Wijsman
1
Na verdade, normalmente percebo 3 ou 4 instâncias svchost.exenos sistemas Windows XP. Neste eu vejo 6.
SamB
4
@TomWij: Seja extremamente cuidadoso ao usar esse trecho - se você estiver usando o EFS (sistema de arquivos com criptografia) e defini-lo como type= ownele pode não funcionar corretamente e você ficará sem acesso aos arquivos criptografados (que podem ser ser catastrófico se os arquivos do sistema operacional são criptografados)!
Beau
@Beau: Você sabe por que explicitamente?
Tamara Wijsman
2
@ Peter Mortensen: Eu criei a ferramenta Service Disclosure . 1. Armazena serviços que compartilham o processo svchost.exe. 2. Configura os serviços para execução em processo separado. 3. Retorna todos os serviços armazenados na etapa 1 de volta a um processo. Seus comentários e sugestões são bem vindos. Obrigado pela ideia.
Dmytro Ovdiienko
18
Você pode usar o tasklistcomando interno e filtrar pelo nome do serviço ( /fiswitch), por exemplo:
tasklist /fi "services eq TermService"
Resultado:
Nome da imagem Nome da sessão PID Sessão # Mem Uso
========================= ======== ================ = ========== ============
svchost.exe 2940 Console 0 7.096 K
Se você não souber um nome, poderá listá-los executando esta instrução:
tasklist /svc /fi "imagename eq svchost.exe"
Ele lista todos os serviços hospedados pelo svchost.exe, por exemplo:
Os serviços não são necessariamente hospedados por svchost.exe. Portanto, se você não conseguir encontrar um serviço filtrando pelo nome do arquivo em execução, basta executar tasklist /svc. Ele mostrará todos os serviços.
Certifique-se de executar o Process Explorer como administrador, clique no svchost que deseja inspecionar, clique no View DLLsbotão (ou CTRL+D). Clique com o botão direito do mouse nos cabeçalhos na janela DLLs Select Columns..., verifique WS Total Bytese pressione OK.
Agora você pode visualizar e classificar o uso de memória de serviços individuais (implementados por dlls) dentro do svchost.
Embora o Process Monitor seja um utilitário de uso geral (que fará tudo, menos lavar a louça para você), para esta pergunta em particular você deseja usar o VMMap (outro utilitário SysInternals)
VMMap é um utilitário de análise de memória virtual e física do processo. Ele mostra um detalhamento dos tipos de memória virtual confirmada de um processo, bem como a quantidade de memória física (conjunto de trabalho) atribuída pelo sistema operacional a esses tipos. Além de representações gráficas de uso de memória, o VMMap também mostra informações resumidas e um mapa detalhado da memória do processo. Os poderosos recursos de filtragem e atualização permitem identificar as fontes de uso da memória do processo e o custo da memória dos recursos do aplicativo.
Além de visualizações flexíveis para analisar processos ao vivo, o VMMap suporta a exportação de dados em vários formulários, incluindo um formato nativo que preserva todas as informações para que você possa carregar novamente. Também inclui opções de linha de comando que permitem cenários de script.
Legal! Agora, existe uma maneira de rastrear o uso de um bloco de memória heap no serviço individual que o possui?
Aidan Ryan
3
Isso está entrando no território do stackoverflow, mas se você puder se apossar das estatísticas de memória por thread, poderá correlacioná-lo aproximadamente às dlls de serviço individuais, correspondendo-as às dlls listadas na pilha de threads. Muito para o meu minúsculo cérebro sysadmin, no entanto.
Tenha cuidado com o serviço que você escolher modificar, existem tipos especiais além de "próprio" e "compartilhamento" que não devem ser alterados, como:
núcleo
filesys
gravando
adaptar
Depois disso, basta reiniciar o serviço e você deve ver no ProcessExplorer que ele agora possui seu próprio processo svchost.exe.
Respostas:
Existe uma maneira fácil de obter as informações solicitadas (mas exige uma pequena alteração no seu sistema):
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 Gerenciador de Tarefas ou no Process Explorer (o espaço após "=" é necessário):
Faça isso em uma janela de linha de comando ou coloque-a em um script BAT. São necessários privilégios administrativos e é necessário reiniciar o computador antes que ele entre em vigor.
O estado original pode ser restaurado por:
Exemplo: para executar a Instrumentação de Gerenciamento do Windows em um SVCHOST.EXE separado:
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):
fonte
svchost.exe
nos sistemas Windows XP. Neste eu vejo 6.type= own
ele pode não funcionar corretamente e você ficará sem acesso aos arquivos criptografados (que podem ser ser catastrófico se os arquivos do sistema operacional são criptografados)!Você pode usar o
tasklist
comando interno e filtrar pelo nome do serviço (/fi
switch), por exemplo:Resultado:
Se você não souber um nome, poderá listá-los executando esta instrução:
Ele lista todos os serviços hospedados pelo svchost.exe, por exemplo:
Os serviços não são necessariamente hospedados por
svchost.exe
. Portanto, se você não conseguir encontrar um serviço filtrando pelo nome do arquivo em execução, basta executartasklist /svc
. Ele mostrará todos os serviços.fonte
O Process Explorer mostra realmente o uso de memória individual no svchost Verifique se você possui a versão mais recente daqui http://technet.microsoft.com/en-us/sysinternals/bb896653
Certifique-se de executar o Process Explorer como administrador, clique no svchost que deseja inspecionar, clique no
View DLLs
botão (ou CTRL+D). Clique com o botão direito do mouse nos cabeçalhos na janela DLLsSelect Columns...
, verifiqueWS Total Bytes
e pressioneOK
.Agora você pode visualizar e classificar o uso de memória de serviços individuais (implementados por dlls) dentro do svchost.
fonte
Embora o Process Monitor seja um utilitário de uso geral (que fará tudo, menos lavar a louça para você), para esta pergunta em particular você deseja usar o VMMap (outro utilitário SysInternals)
http://technet.microsoft.com/en-us/sysinternals/dd535533.aspx
VMMap é um utilitário de análise de memória virtual e física do processo. Ele mostra um detalhamento dos tipos de memória virtual confirmada de um processo, bem como a quantidade de memória física (conjunto de trabalho) atribuída pelo sistema operacional a esses tipos. Além de representações gráficas de uso de memória, o VMMap também mostra informações resumidas e um mapa detalhado da memória do processo. Os poderosos recursos de filtragem e atualização permitem identificar as fontes de uso da memória do processo e o custo da memória dos recursos do aplicativo.
Além de visualizações flexíveis para analisar processos ao vivo, o VMMap suporta a exportação de dados em vários formulários, incluindo um formato nativo que preserva todas as informações para que você possa carregar novamente. Também inclui opções de linha de comando que permitem cenários de script.
fonte
Isso está entrando no território do stackoverflow, mas se você puder se apossar das estatísticas de memória por thread, poderá correlacioná-lo aproximadamente às dlls de serviço individuais, correspondendo-as às dlls listadas na pilha de threads. Muito para o meu minúsculo cérebro sysadmin, no entanto.
fonte
Estendo a resposta de Peter Mortensen aqui. Antes de modificar o tipo de serviços, verifique o tipo existente por comando, como:
O que produzirá os seguintes itens:
Qualquer tipo diferente de "10 WIN32_OWN_PROCESS", "20 WIN32_SHARE_PROCESS" não deve ser modificado.
fonte
Separar os serviços é a resposta correta, mas o comando sc config não funcionou para mim (2008 R2).
Você pode fazer isso através do registro, o que significa definir o parâmetro "Tipo" para 0x00000010 (16 de dezembro):
Tenha cuidado com o serviço que você escolher modificar, existem tipos especiais além de "próprio" e "compartilhamento" que não devem ser alterados, como:
Depois disso, basta reiniciar o serviço e você deve ver no ProcessExplorer que ele agora possui seu próprio processo svchost.exe.
fonte