Tags:

Análise de Performance de Sistemas Java

O crescimento de um sistema, tanto nas funcionalidades quanto no número de usuários, pode ocasionar uma queda na performance durante o tempo. Para prever ou corrigir este problema, existem ferramentas e métodos de desenvolvimento de software que podem ajudar.

Geralmente a fase de testes durante o desenvolvimento de um sistema apenas testa o que a aplicação foi especificada para fazer, como testes de regras de negócio. Não é realizado nenhum teste de performance e escalabilidade pois nem sempre estes requisitos não-funcionais estão devidamente especificados na documentação. No entanto, estes testes podem ser inseridos durante o desenvolvimento. A aplicação só será considerada pronta quando os testes de performance e negócio passarem.

Para garantir a performance no sistema é interessante integrar esses testes na build automática e também documentar tudo que seja relacionado ao desempenho esperado do sistema na análise de requisitos. Existem algumas perguntas que podem ser respondidas para auxiliar nesta documentação:

  • Qual é o throughput esperado?
  • Qual é a latência esperada entre uma ação e a resposta desta ação?
  • Quantos usuários ou quantas tarefas a aplicação deve suportar?
  • Qual é o throughput e latência aceitável no número máximo de usuários ou tarefas?
  • Qual é a maior latência possível?

Quando é necessário fazer uma análise de performance, podem ser usadas duas abordagens: Top Down e Bottom Up.

A Top Down é mais utilizada por desenvolvedores e testadores. A análise começa pela camada mais alta e vai até a mais baixa, ou seja, começa do nível da aplicação e vai até o nível de hardware até encontrar o problema de performance. A análise começa com o monitoramento da aplicação. É observado quanto de memória e CPU a aplicação está consumindo e são verificados dados de estatísticas da JVM. Com os dados obtidos nestas análises, pode ser feita uma melhoria no sistema operacional ou uma melhoria na JVM.

Bottom Up é o inverso da Top Down, a análise começa na camada de hardware e sobe até a camada de aplicação; esta abordagem é mais utilizada por especialistas em performance. O analista pode fazer uma análise e identificar qual o melhor hardware para a aplicação, qual a melhor arquitetura de CPU e outros componentes de hardware que podem ser melhorados. O Bottom Up é utilizado quando a aplicação será usada em diferentes sistemas operacionais, hardwares e quando a aplicação ja está em produção e nenhuma alteração no código pode ser feita.

Etapas/ações para identificar problemas de perfomance:

  • Performance Monitoring

Primeiro passo a ser feito quando o cliente relata um problema mas não dá muita informação sobra a raíz do problema. É uma ação preventiva ou proativa e também não intrusiva para coletar e observar o desempenho de uma aplicação. Em ambiente Windows, geralmente é usado o próprio Task Manager para verificar o consumo de memória e CPU.

  • Performance Profiling

Esta etapa possui um foco maior em encontrar onde na aplicação está ocorrendo o problema de performance. Esta ação já é uma ação intrusiva, pois é usada uma ferramenta de Profiler para coletar e observar a performance de uma aplicação.

  • Performance Tuning

Nesta etapa são feitas as correções dos problemas encontrados na ação anterior. Como podem ser encontrados erros em todas as camadas do sistema, esta ação não foca em apenas correção de código, mas podem ser feitas configurações no sistema operacional, base de dados e até na parte de hardware.

Existem duas ferramentas muito boas para monitorar as aplicações Java que estão disponíveis junto com a JDK (Java Development Kit) a partir da versão 5 e, portanto, são gratuitas. Com elas é possível fazer o monitoramento de aplicações desenvolvidas a partir da JDK 1.4.2. Haverá uma maior quantidade de funções para monitorar dependendo da versão da JDK que foi utilizada para desenvolver a aplicação.

Uma destas ferramentas é a JConsole. Não é um profiler, pois a sua maior função é fazer o monitoramento do uso de memória, threads, classes, uso da CPU, entre outras coisas que a seja possível monitorar.

Outra ferramenta é a VisualVM. Ela está disponível a partir da JDK 6 Update 7. Além de oferecer as funcionalidades do JConsole, ela possui uma quantidade maior de funcionalidades e permite fazer o profiling da aplicação. Além disso, é possível instalar plug-ins, possibilitando incluir ainda mais funcionalidades.

Com estas ferramentas e métodos para identificar e resolver problemas de performance, é possível desenvolver um sistema que garanta uma bom desempenho, mesmo que ele continue crescendo em número de funcionalidades e usuários.

Por MATERA SYSTEMS

Postado em: 26 de setembro de 2012

Confira outros artigos do nosso blog

REST não é JSON

21 de agosto de 2017

Bruno Sofiato

[Webinar] Profile de aplicações Java com Oracle Mission Control e Flight Recorder

24 de julho de 2017

Danival Calegari

Criando Mocks de serviços REST com SoapUI

27 de junho de 2017

Monise Costa

JavaScript 6: diferença entre var, let e const

09 de maio de 2017

Otávio Felipe do Prado

Deixe seu comentário