O seu aplicativo. NET está pronto para uma corrida?
Se o seu aplicativo .NET executar um sprint, será que ele ganharia a corrida? Para determinar se o aplicativo encontra os seus objetivos de desempenho (e vence a corrida) e para ajudar a identificar os gargalos, é preciso medir o desempenho do aplicativo e coletar as métricas.
Se o seu aplicativo .NET executar um sprint, será que ele ganharia a corrida? Para determinar se o aplicativo encontra os seus objetivos de desempenho (e vence a corrida) e para ajudar a identificar os gargalos, é preciso medir o desempenho do aplicativo e coletar as métricas. As métricas de interesse particular tendem a ser o tempo de resposta, o rendimento, e a utilização de recursos o seu aplicativo consome durante a execução de suas tarefas.
Vamos começar dando uma olhada nas ferramentas e técnicas que estão disponíveis para coletar dados de desempenho para o seu aplicativo .NET.
Técnicas e ferramentas
Você pode precisar fazer a coleta de dados durante a prototipagem, o desenvolvimento de aplicativos, os testes de desempenho e ajustes em um ambiente de produção. As seguintes ferramentas e técnicas podem ajudá-lo a fazer essa coleta:
- Métricas do sistema e da plataforma;
- Ferramentas de monitoramento de rede;
- Ferramentas de criação de perfil;
- Ferramentas para analisar arquivos de log;
- Aplicativos de instrumentação.
Não iremos nos aprofundar nos detalhes dessas ferramentas, já que elas vão além do âmbito deste artigo e a maioria delas são ferramentas padrão que vêm com ferramentas de desenvolvimento, como o Visual Studio.
Instrumentação de aplicativos
Além do perfil e dos instrumentos de monitoramento, você pode instrumentar o seu código para capturar informações específicas do aplicativo. Este tipo de informação é muito mais refinada do que a fornecida pelos contadores do sistema de desempenho padrão. É também uma ótima maneira de capturar as métricas em torno de cenários de aplicativos específicos.
Por exemplo, a instrumentação permite medir quanto tempo leva para adicionar um item ao carrinho de compras, ou quanto tempo leva para validar um número de cartão de crédito. Existem várias formas para você instrumentar seu código. Elas estão resumidas na seção seguinte, e cada abordagem vai ser expandida nas seções seguintes.
Instrumentação
Instrumentação é o processo de adicionar o código ao seu aplicativo para gerar eventos para que você possa monitorar a integridade e o desempenho do aplicativo. Os eventos são geralmente registrados a uma fonte de evento apropriada, que pode ser monitorada por ferramentas de monitoramento adequadas, tais como o MOM. Um evento é uma notificação de alguma ação.
Instrumentação permite executar várias tarefas:
- Aplicativos de perfil. A criação de perfis permite identificar quanto tempo um determinado método ou uma determinada operação leva para ser executada e quão eficiente ela é em termos de CPU e uso de recursos de memória;
- Coletar dados personalizados. Isto pode incluir os contadores de desempenho personalizados que você usa para controlar a atividade específica do aplicativo específico de atividade;
- Rastreamento de código. Isso permite que você entenda o caminho do código do aplicativo e todos os métodos são executados por um caso de uso particular.
Você pode usar várias ferramentas e tecnologias para te ajudar a instrumentar o seu aplicativo. A escolha certa depende de sua plataforma de desenvolvimento, a frequência de registro, o volume de dados que estão sendo registrados e como você pretende fazer o monitoramento. Você possui várias opções:
- Rastreamento de Eventos para Windows (ETW);
- Instrumentação de gerenciamento do Windows (WMI);
- Contadores de desempenho personalizados;
- Instrumentação de Empresa Framework (EIF);
- Classes Trace e Debug.
As diversas opções disponíveis para o registro são adequadas para diferentes cenários. As perguntas a seguir ajudam a fazer uma escolha consciente:
O que você quer realizar com a instrumentação?
Existem vários objetivos para instrumentação. Por exemplo, se você só precisa de recursos de depuração e rastreamento, você pode usar esses recursos principalmente em um ambiente de teste onde o desempenho não é um problema. Mas se você pretende registrar as ações empresariais realizadas por cada usuário, isso é muito importante do ponto de vista do desempenho e precisa ser considerado no momento da criação.
Caso precise rastrear e registrar a atividade, é necessário optar por uma ferramenta que permita que você especifique vários níveis de instrumentação por meio de um arquivo de configuração.
Com que frequência você precisa registrar eventos?
A frequência de registro é um dos fatores mais importantes e que vão te ajudar a decidir pela ferramenta certa de instrumentação para você. Por exemplo, o registro de eventos é adequado apenas para eventos com frequências muito baixas, enquanto um arquivo de log personalizado ou ETW é mais adequado para registro de alta frequência. Os contadores de desempenho personalizados são melhores para tendências a longo prazo, tais como testes de estresse de uma semana.
A sua instrumentação é configurável?
Em um cenário da vida real de um aplicativo, você pode querer instrumentá-lo, de modo que os dados coletados sejam úteis em diversas etapas do aplicativo, como o desenvolvimento (depuração/rastreamento), teste de sistema, ajuste e planejamento de capacidade.
Todos os códigos stub para geração dos dados precisam ser inseridos no aplicativo durante a fase de desenvolvimento do ciclo de vida. Os códigos stub usados para a geração de uma quantidade tão grande de dados podem, eles mesmos, adicionar a sobrecarga de desempenho. No entanto, na maioria dos cenários, é em um pequeno subconjunto de dados que você está interessado durante uma fase específica do ciclo de vida. Você precisa de uma instrumentação configurável, de modo que o conjunto relevante possa ser ligado à vontade para minimizar a sobrecarga de desempenho.
Com base nas considerações anteriores, os cenários de utilização para as diversas opções são os seguintes.
- Rastreamento de Eventos para Windows (ETW) – O ETW é adequado para o registro de alta frequência de eventos como erros, avisos ou auditorias. A frequência de corte pode ser de centenas de milhares de eventos por segundo em um aplicativo em execução. Isto é ideal para os aplicativos de servidor que registram as ações empresariais realizadas pelos usuários. A quantidade de registros feitos pode ser elevada, dependendo do número de usuários simultâneos conectados ao servidor;
- Windows Management Instrumentation (WMI) – O Windows Management Instrumentation é a tecnologia de núcleo de gestão embutido no sistema operacional do Windows. O WMI suporta uma ampla gama de ferramentas de gestão que permite analisar os dados coletados para o seu aplicativo. Conectar um coletor ao WMI é mais dispendioso do que os outros coletores, então você geralmente deve fazê-lo apenas para eventos críticos e de alta visibilidade, como uma falha de driver do sistema;
- Contadores de desempenho personalizados – Você pode usar contadores personalizados para cronometrar os principais cenários de tempo dentro do seu aplicativo. Por exemplo, você pode usar um contador personalizado para cronometrar quanto tempo o aplicatvo leva para colocar as coisas em uma ordem ou quanto tempo leva para recuperar os registros de clientes;
- Instrumentação de Empresa Framework (EIF) – O FEI permite que aplicativos .NET estejam instrumentados para publicar um amplo espectro de informações, como erros, avisos, auditorias, diagnósticos, eventos e eventos de negócios específicos. Você pode configurar quais eventos você gera e para onde eles vão – para o serviço de Log de Eventos do Windows ou SQL Server, por exemplo. O FEI encapsula a funcionalidade do ETW, o serviço de registro de eventos e WMI. O FEI é adequado para aplicativos de grandes empresas, onde você precisa de vários níveis de log em seu aplicativo entre as camadas. O FEI também oferece um arquivo de configuração onde você pode ligar ou desligar o interruptor para o registro de um contador em particular. O FEI possui também uma característica importante do pedido de rastreamento que permite rastrear os processos de negócios ou serviços de aplicativos, seguindo um caminho de execução de um aplicativo que mede múltiplas camadas físicas.
- Classes Trace e Debug – As classes Trace e Debug permitem adicionar funcionalidade em seu aplicativo, principalmente para fins de depuração e rastreamento. O código adicionado, usando a classe Debug, é relevante para compilações de depuração do aplicativo. Você pode imprimir as informações de depuração e verificar a lógica das afirmações para várias expressões regulares em seu código. Você pode escrever as informações de depuração, registrando um ouvinte específico, como mostrado no exemplo de código a seguir.
public static void Main(string[] args){
Debug.Listeners.Add(new TextWriterTraceListener(Console.Out));
Debug.AutoFlush = true;
Debug.WriteLine(“Entering Main”);
Debug.WriteLine(“Exiting Main”);
}
Os códigos stub adicionados usando a classe Trace são habilitados tanto para a depuração, quanto para as compilações do aplicativo. Essa classe pode ser usada para isolar os problemas, permitindo o rastreamento através do caminho de código de execução.
No Visual Studio. NET, o rastreamento é ativado por padrão. Ao utilizar a linha de comando para construir o código fonte C#, você precisa adicionar / d: Trace flag para o compilador ou # define TRACE no código-fonte para permitir o rastreamento. Para o código fonte Visual Basic .NET, você precisa adicionar / d: TRACE = True para o compilador de linha de comando. O exemplo de código a seguir usa a classe Trace para adicionar o recurso de rastreamento em seu código.
public static void Main(string[] args){
Trace.Listeners.Add(new TextWriterTraceListener(Console.Out));
Trace.AutoFlush = true;
Trace.WriteLine(“Entering Main”);
Trace.WriteLine(“Exiting Main”);
}
***
O artigo original está disponível em: http://blog.monitis.com/index.php/2012/09/07/measuring-net-application-performance/







