Arquivo

Posts Tagged ‘Performance Counter’

Instrumentação .NET – Contadores de Performance

Olá amigos..

Neste artigo irei demonstrar como monitorar sua aplicação com contadores de performance.

O Windows tem uma ferramenta para gerenciar contadores de performance chamada “perfmon”. Você pode acessa-la digitando “perfmon” no executar do Windows.

Nova Imagem

Nesta ferramenta você pode monitorar uma série de contadores que já estão configurados no seu computador. Utilizando o namespace System.Diagnostics você poderá criar um contador de performance para ser monitorado, você também poderá ler um contador a partir de sua aplicação. Vamos aprender como ler um contador de performance.

PerformanceCounter contadorPerformance = new PerformanceCounter(“Processor”, “% Processor Time”, “_Total”);

No código acima estou indicando que quero criar um contador de Performance baseado em um já existente no sistema operacional. No caso específico estou indicando a categoria “Processor”, Indicando o contador “% Processor Time” e a instancia “_Total”.

Depois de instanciado o contador você poderá monitora-lo. Segue abaixo um exemplo.

for (int i = 0; i < 10; i++)
{
    Thread.Sleep(1000);
    Console.WriteLine(contadorPerformance.NextValue());
}

No exemplo acima eu utilizei a propriedade NextValue para recuperar qual o valor calculado do contador.

Para criar um contador de performance você pode utilizar o seguinte exemplo:

PerformanceCounterCategory.Create(“Categoria do meu Contador”, “Ajuda da Categoria”,
                PerformanceCounterCategoryType.SingleInstance, “Meu contador”, “Ajuda do Meu contador”);

O primeiro parâmetro indica o nome da categoria a ser criada, seguido pelo parâmetro que indica o Help da mesma, o terceiro parâmetro indica a quantidade de instancias o contador poderá ter, já o quarto parâmetro indica o nome do contador e logo em seguida vem o parâmetro que indica o Help do mesmo. Segue abaixo alguns métodos interessantes para o gerenciamento de contadores.

PerformanceCounterCategory.Delete(“Categoria do meu Contador”); //Exclui uma categoria
PerformanceCounterCategory.CounterExists(“Meu contador”, “Categoria do meu Contador”); //Verifica se um contador existe
PerformanceCounterCategory.Exists(“Categoria do meu Contador”); //Verifica se uma categoria existe
PerformanceCounterCategory.GetCategories(); //Retorna todas as categorias cadastradas

Você também pode adicionar vários contadores a mesma categoria.

CounterCreationDataCollection conts = new CounterCreationDataCollection();
conts.Add(new CounterCreationData(“Contador 1”, “Ajuda do Contador 1”, PerformanceCounterType.NumberOfItems64));
conts.Add(new CounterCreationData(“Contador 2”, “Ajuda do Contador 2”, PerformanceCounterType.NumberOfItems64));
PerformanceCounterCategory.Create(“Categoria do meu Contador”, “Ajuda da Categoria”,
PerformanceCounterCategoryType.SingleInstance, conts);

Você pode verificar o parâmetro criado na ferramenta perfmon do Windows. Clique em um botão com o sinal de positivo “+” e procure o sua categoria criada e seu contador criado e adicione ao monitoramento.

PerformanceCounter contPerf = new PerformanceCounter(“Categoria do meu Contador”, “Meu contador”, false);
for (int i = 0; i < 100; i++)
{
   contPerf.Increment();
   Console.WriteLine(contPerf.NextValue());
}

No exemplo acima eu instancia o contador criado no exemplo anterior passando um parâmetro booleano como false. Este parâmetro indica que o contador não é read-only. O método “Increment” adiciona o valor 1 no contador. Você pode verificar o incremento tanto no console quanto no perfmon. Segue abaixo alguns métodos úteis para utilização do contador de performance.

contPerf.RawValue = 5; //Configura um valor para o contador
contPerf.Increment(); //Adiciona 1 ao contador. Tipo thread-Safe
contPerf.Decrement(); //Remove 1 ao contador. Tipo thread-Safe
contPerf.IncrementBy(2); //Adiciona 2 ao contador. Tipo thread-Safe
Console.WriteLine(contPerf.CategoryName); //Recupera a categoria do contador
Console.WriteLine(contPerf.CounterHelp); //Recupera o help do contador
Console.WriteLine(contPerf.CounterName); //Recupera o nome do contador
Console.WriteLine(contPerf.CounterType); //Recupera o tipo do contador
Console.WriteLine(contPerf.InstanceName); //Recupera o nome da instancia do contador

E é isso ai pessoal, espero que a partir de hoje você saiba como monitorar a performance de sua aplicação de uma forma que seja de fácil leitura para o pessoal de Infra da sua empresa.

%d bloggers like this: