Introdução aos Testes de Desempenho César Fernandes Teixeira
César Fernandes Teixeira
Analista de Desempenho – Base2 Tecnologia Mestre em Ciência da Computação (UFMG) Bacharel em Ciência da Computação (UFMG) Certificado CTFL pelo ISTQB Participou, durante a graduação e mestrado, de
projetos de pesquisa de análise e modelagem de desempenho, planejamento de capacidade e projeto experimental em ciência da computação
2
PARTE 1: Introdução e Motivação
3
Motivação
4
Servidor e-commerce
?!
Motivação
5
Servidor e-commerce
?
?
?
Motivação Sistema de Seleção Unificada (Sisu) - 2011
6
Motivação Amazon - 2008
7
Fonte: http://idgnow.uol.com.br
Introdução Os testes de desempenho permitem:
Saber o comportamento do sistema sob a carga esperada
Saber a carga máxima suportada pelo sistema
Planejar melhorias no ambiente para atender a demandas atuais e futuras
Não perder clientes por falhas no desempenho
8
Introdução
9
Teste de carga• Testes realizados para verificar se o sistema suporta uma
determinada carga desejada
Teste de estresse• Testes realizados para determinar a capacidade máxima do
sistema
Teste de estabilidade• Testes realizados para verificar se o sistema degrada o
desempenho com o tempo
• Tipos de testes de desempenho
Fronteiras entre os testes podem não ser tão rígidas!
Conceitos Principais
10
• Carga: volume de tráfego para um determinado sistema. Geralmente medida em transações, requisições e usuários.
• Requisição: requisição http realizada.
Conceitos Principais
11
• Transação: operação completa no sistema. Por exemplo, buscar um produto.
• Sistema: todo o conjunto de servidores, rede entre servidores, softwares de terceiros e a aplicação.
• Utilização de um recurso: percentual, em uso, do total de recursos disponíveis.
Conceitos Principais
12
• Tempo de resposta: Tempo desde o momento em que o usuário envia a requisição até o momento em que recebe a resposta completa. • Definição não é universal. • Na nomeclatura do Jmeter , é o elapsed time
Conceitos Principais
13
• Profiling: instrumentação da aplicação para estudo dos métodos e seus tempos de execução.
• Vazão: taxa com que um sistema responde às requisições recebidas.
• Gargalo: tudo o que impede que o sistema apresente maior vazão.• Se a vazão for inferior à taxa com que as requisições
são enviadas ao sistema.
PARTE 2: Metodologia de um Teste de
Desempenho
14
Visão Geral
15
Sistema
?
?
?
Gerador de Carga
!
!
!
Processo de Testes: Etapa 0
16
A etapa inicial é entender os objetivos dos testes• É interessante saber como o sistema se comporta com a
carga atual?• É interessante saber qual a carga máxima que o sistema
suporta?• É interessante conhecer e apontar os gargalos?• Entender qual o sistema a ser testado e a arquitetura do
ambiente.• Qual o limite de tempo de resposta aceitável? (6
segundos).
Processo de Testes: Etapa 0
17
Onde instalar os geradores de carga?• Na mesma rede do sistema• Na mesma rede onde os clientes estarão
Meio de acesso
Processo de Testes: Etapa 0
18
Testar a aplicação do cliente?• Testar o desempenho em browsers diferentes?• Testar o desempenho na aplicação cliente (frontend)?• Testar somente os servidores?
Processo de Teste
19
Configuração do Ambiente
Configurar o sistema que será testado Configurar as máquinas que irão gerar a carga Configurar o monitoramento do ambiente
• O que deve ser monitorado?
20
Monitoramento do sistema
21
Métricas Sistema Operacional (Todas as máquinas)
• Utilização CPU, memória, Swap, disco, rede, etc.• /proc, perfmon, vmstat, etc.
Monitoramento do sistema
22
• Ex: Utilização CPU
Monitoramento do sistema
23
Métricas Banco de Dados• Tempo ocupado, tempo execução médio por query, locks,
leituras físicas e lógicas, etc.• Relatório AWR, etc.
Monitoramento do sistema
24
Ex: Relatório AWR (Oracle)
Monitoramento do sistema
25
Profiling (Servidor de aplicação)
• Tempo de execução por método, tempo de execução em CPU por método, memória consumida por classe, etc.
• VisualVM, RedGate Ants, etc.
Monitoramento do sistema
26
Ex: VisualVM (Java)
Monitoramento do sistema
Há ferramentas que facilitam o monitoramento do sistema:• New Relic
• Integra profiling e monitoramento de métricas do sistema operacional.
• Cacti•Monitoramento de métricas do SO.
• Up.time•Monitoramento de métricas do SO.
27
Modelagem
28
Entender o comportamento dos usuários que se deseja simular (Caracterização)
Criar os scripts para simular as transações de interesse
Modelagem: Caracterização
29
Quantos usuários simultâneos o sistema terá/tem na média? E no momento de pico? 100 usuários. Pico de 300.
Qual a demanda estimada para o futuro? Espera-se um aumento de 50% nos acessos em 1 ano
Quais as transações no sistema que são mais relevantes? Busca por produto e checkout.
Qual a taxa de transações de cada categoria? 200 buscas por minuto, 20 checkouts por minuto.
Modelagem: Caracterização
30
Os dados são obtidos geralmente de duas maneiras• Estudo dos logs dos servidores• Relatórios gerenciais contendo essas informações
Modelagem: Caracterização
31
Exemplo log Apache
127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET /index.html HTTP/1.0" 200 2326127.0.0.1 - frank [10/Oct/2000:13:56:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326192.168.0.1 - paulo [10/Oct/2000:14:06:36 -0700] "GET /checkout.php HTTP/1.0" 200 2326
Modelagem: Scripts
32
Criar scripts para as operações levantadas na caracterização;
Configurar a carga planejada para cada script;
Geralmente os geradores de carga possuem a funcionalidade de criar scripts. Ex: Jmeter, Microfocus SilkPerformer, etc.
Modelagem: Scripts
33
Exemplo: JMeter
Execução dos testes
34
• Gerador de carga • Dispara a carga definida nos scripts criados• Captura as métricas do cliente (i.e. tempo de
resposta, vazão, etc)
• Monitoramento do sistema encontra-se ativo
• A execução gera uma massa de dados que será analisada para a geração do relatório final
Execução dos testes
35
Ferramentas• Jmeter
• Gratuita. Em alguns casos é necessário codificar parte do teste. Menor suporte a tecnologias, como RMI, ajax, silverlight, etc.
• Httperf• Gratuita. Somente para testar get a um conjunto de páginas.
• Microfocus SilkPerformer• Paga. Ainda é preciso codificar partes dos testes em alguns
momentos. Suporta diversas tecnologias mais recentes.• GOMEZ
• Paga. Geração de carga a partir da nuvem. A ferramenta é capaz de monitorar o sistema, inclusive, com profiling.
Relatório Final
36
A partir da massa de dados gerados pela execução, busca responder:• Sistema suporta a carga esperada?• Qual a carga máxima que o sistema suportou?• Ocorreram falhas ou queda no sistema com o
aumento na carga?• Quais os gargalos e o que pode ser feito para
melhorar a vazão?
PARTE 3: Cenário atual, erros comuns e
considerações finais
37
Cenário Atual
38
• Geralmente os testes são feitos no ambiente de homologação
• Geralmente utiliza-se o Jmeter como gerador de carga
Erros comuns
39
• Uso de ferramenta inadequada.
• Não monitorar todo o ambiente. • Desconfie do “Isso não é um problema”.
• Não conhecer o ambiente. • Conheça o ambiente a ser testado antes de planejar
os testes.
Erros comuns
40
• Não caracterizar o sistema.
• Não conhecer os objetivos dos testes.
• Testar depois do sistema estar em produção.
• Não testar no ambiente de produção.
• Somente executar cada teste uma única vez.
Considerações finais
41
• Os testes de desempenho são ferramentas poderosas para entender o comportamento de um sistema e prever sua capacidade máxima.
• A execução e planejamento podem ser complicados e devem ser feitos de maneira cuidadosa.