-->

quinta-feira, 10 de abril de 2008

Acompanhando o consumo de CPU de uma aplicação

Ou, "como o GMAIL atrapalha a execução de filmes."

Este post começou a ser escrito em 19/01 e só agora tive tempo de terminar o texto.

Há semanas, todas as vezes que eu tentava assistir a um filme no PC, tinha problemas com engasgos periódicos na execução. Foi fácil descobrir que isso estava ocorrendo porque a CPU estava "topando" brevemente em 100%, mas por que isso estava acontecendo se a execução do filme não requeria mais que 40% da CPU? Anteontem eu perdi a paciência e resolvi investigar.

O Windows 2000/XP já embute um recurso para que você possa acompanhar o consumo de CPU do sistema inteiro, mas embora isso seja muito útil não basta quando você precisa descobrir qual aplicação entre as muitas rodando está dando "picos" de consumo aparentemente aleatórios. Seria necessário que o Windows mostrasse um gráfico do consumo por aplicação, mas ele mostra apenas o consumo instantâneo, que não ajuda muito quando você está procurando por algo que dura uma fração de segundo.

Por sorte, o freeware Process Explorer (vou chamar de "PEx" daqui em diante) também faz isso.

Talvez vocês se lembrem da última vez que o PEx me ajudou a resolver um problema. Na ocasião eu ainda não sabia que era possível ver mais informações sobre cada processo. Basta clicar duas vezes sobre seu nome pra ver muito mais informação. Mas para o propósito deste post, vou me limitar a exibir o "Performance Graph".



Olhando rapidamente você pensaria que é o monitor do Windows XP, mas note o ícone do Firefox, o título da janela e as outras abas. Existem aperfeiçoamentos sutis: passe o mouse sobre o gráfico e você vai ver o percentual exato de CPU naquele instante e também a hora em que ocorreu . Esse pequeno detalhe já nos permite medir o tempo entre uma ocorrência e outra.

Assim como o monitor do XP, é possível ajustar a largura da janela para ter mais tempo de gráfico.



Você pode ter uma janela aberta para cada processo, se quiser. Mas se você está tentando descobrir que processo está dando picos repentinos de consumo de CPU e tem uns 20 processos em execução (meu PC tem 32 neste exato momento) abrir uma janela para cada um deles não é nada conveniente (mas eu o faria, se fosse o único jeito). Mark Russinovich deve ter a mesma opinião porque o PEx tembém facilita sua vida nesse sentido.

Clique em View -> Select Columns -> Process Performance
Marque CPU History

Uma nova coluna aparecerá, com o histórico de CPU de cada processo!



Eu deixei o PC parado por vários minutos antes de tirar os snapshots deste post. Veja como o Firefox é a única aplicação mal comportada do grupo.

Como no PEx você pode excluir, mover e redimensionar colunas, o acompanhamento fica ainda mais fácil:



Não era exatamente culpa do Firefox. Eu saí fechando aba por aba (geralmente nunca tenho menos que 40 abertas ao mesmo tempo) e acabei descobrindo que era a aba do Gmail. Eu não sei se existe alguma configuração do Gmail que minimize isso e o jeito no momento está sendo fechar a aba do Gmail enquanto assisto a qualquer filme.

5 comentários:

  1. Este post ficou impecável. Muito útil, um espetáculo!

    Ter o poder de saber o que cada processo está fazendo é incrivelmente útil para quem opera um sistema operacional.

    Eu uso o Process Explorer desde que você postou sobre o seu problema de "Hardware Interrupts" que estava sendo causado pelos receptores IR seriais. Conheci o programa de aqui no blog.

    Desde lá eu nunca mais parei de usar. Ele é constante no meu Windows e já recomendei pra muita gente. Literalmente me apaixonei por ele. E nunca paro de me impressionar. De lá pra cá descobri muita coisa útil nele, mas não conhecia o mini-gráfico "CPU History". Já aproveitei e marquei o "Private Bytes History" na aba Process Memory, que é uma espécie de uso de memória (o gráfico amarelo chamado de "Commit" na janela "System Information").

    Quanto ao teu problema de ter que fechar o Gmail, eu tenho uma sugestão.

    Meu pai tem há quase 5 anos um computador só pra colecionar e assistir filmes e já reclamou muito pra mim que 'tá dando umas travadinhas no filme'. E o problema era o BitComet.exe que estava dando esses picos que você falou. Eu solucionei alterando a prioridade dos dois processos principais:

    Coloquei o BitComet.exe com prioridade "Idle: 4" e o mplayer.exe em "High: 13". Essa mudança faz o processador sempre preferir o processamento do mplayer.exe, mas não deixa de processar o que o BitComet precisa, só não causa aqueles picos.

    A mudança de prioridade é acessada no Process Explorer através do botão direito no processo > Set Priority.

    ResponderExcluir
  2. eita, que dessa eu não sabia: não sabia que o Process Explorer podia adicionar uma coluna com o histórico de CPU de cada processo. Vivendo e aprendendo :D

    ResponderExcluir
  3. Jefferson, o Gmail não usa Ajax pra verificar de tempos em tempos se existem novos emails? Será que não é isso que fica causando o maior consumo de CPU?

    ResponderExcluir
  4. Juliano,

    Sim, é por isso mesmo.


    Rafa,

    Eu estou neste momento justamente testando vários programas de controle de prioridades, como o Process Lasso, para resolver um outro problema. Mas não havia me ocorrido que também poderia servir para este. Obrigado pela dica. Vou testar outra hora.

    ResponderExcluir
  5. Muito obrigado!
    Procurei no google por 'picos processamento processos xp' e achei este post do seu blog!
    Sensacional a dica. No meu caso, pude perceber que o Firefox e o Messenger possuem alguns picos. Eu já uso o Cool Beans System Info há algum tempo, que mostra sob a forma gráfica no canto da tela o uso da CPU, RAM e memoria de paginação. Ouvindo mp3 percebi que nos picos de processamento a musica distorcia e depois disso passei a procurar a causa.
    Vou analisar direitinho o comportamento do pc, acredito que seja o messenger! A versão deve ter algum conflito, estou usando o SP3 tambem.
    Mais uma vez obrigado pela dica!
    Seu blog foi para os favoritos.

    ResponderExcluir

Siga as regras do blog ou seu comentário será ignorado.