domingo, 7 de agosto de 2016

Coletando metricas com Jmeter de aplicações no Tomcat

Apache JMeterÉ até comum se desenvolver aplicativos que funcionam bem localmente nos testes, mas quando se faz o deploy em produção e submete uma carga de trabalho real, explode erro pra tudo que é lado, inclusive chegando a derrubar servidores relativamente robustos com estouro de memória, transações que não se concretizam, etc. 

Nesse cenário caótico é possível coletar dados e saber o que está provocando tanto problema, claro que além dos arquivos de logs, no nosso caso o Tomcat.
Quando já deu m#$*& nada melhor do que verificar o que ta acontecendo em tempo real e correr pra resolver.
Relembrando algumas práticas, fazendo outras pesquisas, compilei aqui algumas técnicas aplicadas no container web Tomcat que, de modo geral, pode nortear os rumos pra solução de erros em um cenário como descrito.
Três fatores impactam negativamente o desempenho do Tomcat mais do que qualquer outros:
1)      ​atrasos na rede;
2)      latência cliente remoto;
3)      Arquitetura do aplicativo.

Na maioria dos casos o problema é quase sempre o item 3, não seria de se espantar.
Claro que sem medir, sem ferramentas adequadas ou um profissional com amplo domínio do Tomcat e conhecedor da arquitetura do produto, ficamos meio perdidos sem elementos que apontam onde está exatamente o gargalo(s).
Por isso, a primeira coisa a fazer seria lançarmos mão de ferramentas de coleta de dados de tráfico, requisições HTTP, conexões JDBC, etc. Dai podemos apontar com segurança onde está o foco do problema. Se confirmado que a falha maior seja da arquitetura do sistema, então, podemos determinar de que tipo exatamente se trata esse problema.
Dessa forma, uma opção seria otimizar o Tomcat direcionado de tal forma que mesmo falhas ou consumo excessivo da aplicação não seja capaz de comprometer o servidor. Em último caso, se não tiver outro caminho, remodelar os gargalos da aplicação junto da equipe de desenvolvimento.
Aqui uma noção dos tipos de teste:

Uma boa sugestão para coletar métricas no Tomcat é o Apache Jmeter. Mais detalhes:

Não sou especialista Jmeter, no entanto com alguma leitura da documentação e montando laboratórios, pude notar que dá para chegar à alguns resultados com certa facilidade.



Utilizando o Jmeter

Basta fazer o download do zip da última versão:


Descompactar, em seguida ir na pasta bin (no meu exemplo ficou C:\apache-jmeter-3.0\bin) e então executar o arquivo ApacheJMeter.jar.

Para criar um teste realmente funcional básico, basta uma rápida leitura da documentação aqui:


No caso de páginas que precisa passar parâmetro e efetuar login, deve olhar principalmente a seção “5.6 Logging in to a web-site” que é onde mostra a forma de configurarmos um usuário e senha em que o Jmeter irá fazer requisições e logar


Outra forma bem interessante, a qual sugiro, para montar um bom scritp de testes é gravar a navegação feita na aplicação alvo através do browser no Jmeter.

Configurando o Jmeter pra gravar navegação do Browser e executar posteriormente testes de carga e coleta de métricas

No link abaixo um excelente manual. Basta seguir esse artigo para criar a configuração necessária. 


Após criar as etapas conforme listado no artigo acima, na opção "Servidor HTTP Proxy" quando clicar no botão Iniciar ou Start



então irá surgir as seguintes telas:



O próprio Jmeter gera um certificado a ser utilizado no Browser estabelecendo assim relação de confiança nos testes entre a Jmeter, JVM, Windows e o Browser

Importando o certificado no Chrome: 



Conforme dito na mensagem de geração do certificado, o mesmo foi salvo na pasta bin do Jmeter



Pronto. Agora ao navegar, no site configurado em “Nome do Servidor ou IP”, será capturado a navegação conforme a opção “Padrões de URL a Serem Incluídos”

E agora, o que fazer com os dados coletados?

Veja esses artigos selecionados que vão dar uma boa resposta a nossa indagação:
http://sumoners.github.io/2015/10/07/performance-da-sua-aplicacao-jmeter
http://www.bugbang.com.br/destilando-jmeter-i-introducao-e-conceitos


Como monitorar o servidor com JMeter

Aqui um ótimo artigo sobre o assunto. Vale a pena conferir:
www.blazemeter.com/blog/how-monitor-your-server-health-performance-during-jmeter-load-test


http://pt.slideshare.net/joao.galdino/abrindo-a-caixa-de-ferramentas-atirando-pedras-com-jmeter

Nenhum comentário: