Pergunta

Suspeito que um dos meus aplicativos consome mais ciclos de CPU do que eu gostaria.O problema é que isso acontece em rajadas, e apenas olhar para o gerenciador de tarefas não me ajuda, pois mostra apenas o uso imediato.

Existe uma maneira (no Windows) de rastrear o histórico de uso de CPU e memória para algum processo.Por exemplo.Começarei a rastrear o "firefox" e, depois de uma hora, verei um gráfico do uso de CPU e memória durante essa hora.

Estou procurando uma ferramenta pronta ou uma forma programática de conseguir isso.

Foi útil?

Solução

Basta digitar perfmon em Start > Run e pressione Enter.Quando a janela Desempenho estiver aberta, clique no sinal + para adicionar novos contadores ao gráfico.Os contadores são diferentes aspectos de como o seu PC funciona e são agrupados por similaridade em grupos chamados “Objeto de Desempenho”.

Para suas dúvidas você pode escolher os objetos de performance "Processo", "Memória" e "Processador".Você poderá então ver esses contadores em tempo real

Você também pode especificar o utilitário para salvar os dados de desempenho para sua inspeção posterior.Para fazer isso, selecione “Logs e alertas de desempenho” no painel esquerdo.(Está logo abaixo do console do System Monitor, que nos fornece os contadores mencionados acima.Se não estiver lá, clique em "Arquivo" > "Adicionar/remover snap-in", clique em Adicionar e selecione "Logs e alertas de desempenho" na lista".) Em "Logs e alertas de desempenho", crie uma nova configuração de monitoramento em "Registros de contadores".Em seguida, você pode adicionar os contadores, especificar a taxa de amostragem, o formato do log (binário ou texto simples) e a localização do log.

Outras dicas

Explorador de processos pode mostrar o tempo total de CPU gasto por um processo, bem como um gráfico de histórico por processo.

Usando perfmon.exe, tentei usar o contador "Bytes privados" nos contadores "Processo" para rastrear o uso de memória e funciona bem.

talvez você possa usar isso.Deve funcionar para você e reportará o tempo do processador para o processo especificado.

@echo off
: Rich Kreider <rjk@techish.net>
: report processor time for given process until process exits (could be expanded to use a PID to be more
: precise)
: Depends:  typeperf
: Usage:  foo.cmd <processname>

set process=%~1
echo Press CTRL-C To Stop...
:begin
for /f "tokens=2 delims=," %%c in ('typeperf "\Process(%process%)\%% Processor Time" -si 1 -sc 1 ^| find /V "\\"') do (
if %%~c==-1 (
goto :end
) else (
echo %%~c%%
goto begin
)
)

:end
echo Process seems to have terminated.

Concordo, perfmon.exe permite adicionar contadores (clique com o botão direito no painel direito) para qualquer processo que você deseja monitorar.

Objeto de desempenho:Verifique o processo "Selecione Instâncias na lista" e selecione Firefox.

WMI é Windows Management Instrumentation e está integrado em todas as versões recentes do Windows.Ele permite que você rastreie programaticamente coisas como uso de CPU, E/S de disco e uso de memória.

Perfmon.exe é um front-end GUI para esta interface e pode monitorar um processo, gravar informações em um log e permitir que você analise o log após o fato.Não é o programa mais elegante do mundo, mas dá conta do recado.

O Process Lasso foi projetado mais para automação de processos e otimização de classes de prioridade, não para gráficos.Dito isto, é faz oferecem histórico de utilização da CPU por processo (desenhado como uma linha branca no gráfico), mas NÃO oferecem histórico de utilização de memória por processo.

ISENÇÃO DE RESPONSABILIDADE:Eu sou o autor do Process Lasso, mas não o estou endossando aqui - pois existem soluções melhores (sendo perfmon a melhor).

A melhor coisa de sempre é o Monitor de Recursos e Desempenho do Windows Vista+.Ele pode rastrear o uso de acessos de CPU, memória, rede e disco por processos ao longo do tempo.É um excelente utilitário geral de informações do sistema que deveria ter sido criado há muito tempo.A menos que eu esteja enganado, ele pode rastrear a utilização da CPU e da memória por processo ao longo do tempo (entre outras coisas listadas).

Você também pode tentar usar um script C#/Perl/Java para obter os dados de utilização usando comandos WMI e abaixo estão as etapas para isso.

Precisamos executar 2 consultas de seleção WMI e aplicar a fórmula de utilização de% da CPU

1.Para recuperar o número total de processos lógicos

select NumberOfLogicalProcessors from Win32_ComputerSystem

2.Para recuperar os valores de PercentProcessorTime, TimeStamp_Sys100NS (a fórmula de utilização da CPU foi aplicada para obter a porcentagem de utilização real) e WorkingSetPrivate (RAM) no mínimo 2 vezes com um intervalo de suspensão de 1 segundo

select * from Win32_PerfRawData_PerfProc_Process where IDProcess=1234

3.Aplicar fórmula de utilização de% de CPU

CPU%= ((p2-p1)/(t2-t1)*100)/NumberOfLogicalProcessors

p2 indica PercentProcessorTime recuperado pela segunda vez e p1 indica PercentProcessorTime recuperado pela primeira vez, t2 e t1 são para TimeStamp_Sys100NS.

Um exemplo de código Perl para isso pode ser encontrado no link http://www.craftedforeveryone.com/cpu-and-ram-utilization-of-an-application-using-perl-via-wmi/

Esta lógica se aplica a todas as linguagens de programação que suportam consultas WMI

Embora eu não tenha tentado isso, ProcDump parece uma solução melhor.

Descrição do site:

ProcDump é um utilitário de linha de comando cujo objetivo principal é monitorar um aplicativo em busca de picos de CPU e gerar despejos de memória durante um pico que um administrador ou desenvolvedor pode usar para determinar a causa do pico.ProcDump também inclui monitoramento de janela travada (usando a mesma definição de travamento de janela que o Windows e o Gerenciador de Tarefas usam), monitoramento de exceção não tratada e pode gerar dumps com base nos valores dos contadores de desempenho do sistema.Ele também pode servir como um utilitário geral de despejo de processo que pode ser incorporado em outros scripts.

Hum, eu vejo isso Explorador de processos pode fazê-lo, embora seus gráficos não sejam muito convenientes.Ainda procurando maneiras alternativas/melhores de fazer isso.

Perfmon.exe está integrado ao Windows.

Você pode querer dar uma olhada Processar laço.

No Windows 10, o Gerenciador de Tarefas pode mostrar horas cumulativas de CPU.Basta acessar a guia "Histórico do aplicativo" e "Excluir histórico de uso".Agora deixe tudo funcionando por uma ou duas horas:

Windows 10 Cumulative CPU time

O que isso NÃO faz é dividir o uso nos navegadores por guia.Muitas vezes, as guias inativas realizam uma enorme quantidade de trabalho, com cada guia aberta consumindo energia e deixando o PC lento.

Eu uso taskinfo para gráfico histórico de velocidade de CPU/RAM/IO.http://www.iarsn.com/taskinfo.html

Mas explosões de falta de resposta soam mais como tempo de interrupção devido a uma unidade HD/SS defeituosa.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top