Coletando metricas com Jmeter de aplicações no Tomcat
Autor: Antonio Augusto | Publicado: 2016-08-07T15:14:00-07:00








É 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.&nbsp;



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#$*&amp; nada melhor do que verificar o que ta acontecendo em tempo real e correr pra resolver.

Relembrando algumas práticas,
fazendo outras&nbsp;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: 

<!--[if !supportLists]-->1)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<!--[endif]-->​atrasos na rede;

<!--[if !supportLists]-->2)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<!--[endif]-->latência cliente remoto;

<!--[if !supportLists]-->3)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<!--[endif]-->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:

http://pt.stackoverflow.com/questions/92086/como-testar-bem-um-software




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


http://jmeter.apache.org



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.



http://jmeter.apache.org/usermanual/index.html


http://jmeter.apache.org/usermanual/get-started.html





Utilizando o Jmeter



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



http://jmeter.apache.org/download_jmeter.cgi




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:



http://jmeter.apache.org/usermanual/build-web-test-plan.html




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.&nbsp;



http://testingfreak.com/jmeter/record-your-first-script




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

<!--[if gte vml 1]><v:shape
 id="Imagem_x0020_1" o:spid="_x0000_i1027" type="#_x0000_t75" style='width:425.25pt;
 height:239.25pt;visibility:visible;mso-wrap-style:square'>
 <v:imagedata src="file:///C:/Users/prohgy/AppData/Local/Temp/msohtmlclip1/01/clip_image005.png"
  o:title=""/>
<![endif]--><!--[if !vml]--><!--[endif]-->



Importando o certificado no Chrome:&nbsp;







<!--[if gte vml 1]><v:shape
 id="Imagem_x0020_3" o:spid="_x0000_i1026" type="#_x0000_t75" style='width:425.25pt;
 height:239.25pt;visibility:visible;mso-wrap-style:square'>
 <v:imagedata src="file:///C:/Users/prohgy/AppData/Local/Temp/msohtmlclip1/01/clip_image007.png"
  o:title=""/>
<![endif]--><!--[if !vml]--><!--[endif]-->



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



Fontes:http://jmeter.apache.org

http://pt.stackoverflow.com/questions/92086/como-testar-bem-um-software


http://www.w3ii.com/pt/jmeter/jmeter_test_plan_elements.html


http://jmeter.apache.org/usermanual/jmeter_proxy_step_by_step.pdf

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

http://testingfreak.com/jmeter/record-your-first-script