Compartilhar via


Como coletar dados de desempenho

Depois de criar uma consulta e adicionar contadores a ela, chame a função PdhCollectQueryData para recuperar os dados brutos atuais para todos os contadores na consulta.

Muitos contadores, como contadores de taxa, exigem duas amostras de dados para calcular um valor de dados formatado. O PDH mantém os dados da amostra atual e da amostra coletada anteriormente. O procedimento a seguir descreve como coletar valores de contador que exigem duas amostras para calcular um valor que pode ser exibido.

Para coletar valores de contador que exigem duas amostras para calcular um valor que pode ser exibido

  1. Chame PdhCollectQueryData para coletar a primeira amostra.
  2. Chame a função Sleep para aguardar, pelo menos, um segundo entre as coletas.
  3. Chame PdhCollectQueryData novamente para coletar a segunda amostra.
  4. Chame a função PdhGetFormattedCounterValue para calcular um valor que pode ser exibido.
  5. Repita as etapas 2 a 4.

Como alternativa à implementação de um período de espera, você pode chamar a função PdhCollectQueryDataEx, que cria um thread de tempo que aguarda um tempo especificado, coleta a amostra e dispara um evento definido pelo aplicativo.

Caso deseje consultar os dados de desempenho de um arquivo de log, defina também um intervalo de tempo. O intervalo de tempo limita a consulta às amostras que foram coletadas dentro do intervalo de tempo (cada amostra contém um carimbo de data/hora de quando ela foi coletada). Para obter mais informações sobre como definir e recuperar intervalos de tempo, confira Como definir um intervalo de tempo para uma consulta.

Caso deseje coletar dados de desempenho e gravá-los em um arquivo de log, chame a função PdhUpdateLog em vez de chamar PdhCollectQueryData. Para obter detalhes, confira Como trabalhar com arquivos de log e Como gravar dados de desempenho em um arquivo de log.

Para obter detalhes sobre como calcular um valor de amostra que pode ser exibido, confira Como exibir dados de desempenho.

Noções básicas sobre contadores de multiprocessador

Alguns contadores de desempenho foram projetados para sistemas de processador único e talvez não sejam precisos para computadores com multiprocessador. Por exemplo, um processo é limitado a 100% de um só processador. No entanto, os threads dele podem usar vários processadores, totalizando mais de 100%.

O valor do contador “\Processador(_Total)\% de Tempo do Processador” é o uso médio de todos os processadores. Por exemplo, se você tiver dois processadores, um com 100% e outro com 0%, esse contador relatará 50%. Portanto, o intervalo é de 0 a 100.

O valor do contador “\Processo(X)\% de Tempo do Processador” (sendo X o nome do processo), é a soma do uso do processador por todos os threads do processo X. Por exemplo, em um computador com dois processadores, se um processo tiver dois threads, um ocupando 75% de uma CPU e o outro ocupando 80% de outra CPU, esse contador relatará 155%. O intervalo desse contador é de 0 a 100 * ProcessorCount.

Ao usar o conjunto de contadores Process, você pode receber valores fora do intervalo esperado dos valores de uso da CPU. Para calcular o percentual de uso da CPU, o PDH precisa de duas amostras (cada uma com um valor bruto e um carimbo de data/hora). Como o PDH usa apenas o nome da instância para fazer a correspondência dos processos, às vezes, ele pode misturar amostras de processos diferentes. Por exemplo, se a amostra de três processos com o mesmo nome de instância estiver sendo realizada e um dos processos for encerrado após a terceira amostra, outro processo será movido para o slot desocupado por esse processo encerrado. Como resultado, um contador formatado fornecerá um valor incorreto quando você formatar a quarta amostra, porque ele está usando a terceira amostra do processo encerrado e a quarta amostra do processo que foi movida para o slot do processo encerrado.

A tabela a seguir mostra como isso pode ocorrer se um processo for encerrado enquanto os dados estão sendo coletados. A tabela mostra cinco amostras de valor de contador para três instâncias do processo X. As amostras são coletadas em intervalos de um segundo. Depois que a terceira amostra é coletada, o processo X no slot 1 é encerrado. Quando o processo X no slot 1 é encerrado, o processo X no slot 2 é movido para o slot 1. Quando você coleta a quarta amostra para o processo X no slot 2, o primeiro valor passa a ser 20, em vez de 1.000 e o segundo valor é 1.500. Ao formatar o valor do contador, você obtém 1.480 milissegundos, em vez dos 500 milissegundos esperados. Ao formatar o quinto valor de amostra, você deverá obter o valor esperado.

Amostra Slot 0 do processo X Slot 1 do processo X Slot 2 do processo X
Exemplo 1 0 0 0
Exemplo 2 20 10 500
Exemplo 3 40 20 1.000
Exemplo 4 60 1.500 (do antigo slot 2) Não aplicável. Agora coletada no slot 1.
Exemplo 5 80 2\.000 Não aplicável. Agora coletada no slot 1.

Dica

A partir do Windows 11, você pode evitar esse problema usando o novo conjunto de contadores Process V2. O conjunto de contadores Process V2 inclui a ID do processo no nome da instância. Com isso, evita-se os resultados inconsistentes que aparecem com o conjunto de contadores Process original.