BT

Disseminando conhecimento e inovação em desenvolvimento de software corporativo.

Contribuir

Tópicos

Escolha a região

Início Notícias Profiler mais fácil com Perf4j

Profiler mais fácil com Perf4j

Quando você começa a pensar sobre profiling das aplicações Java, muitas ferramentas vem à mente - mas você acha que profiling poderiam ser tão fácil quanto adicionar declarações de logging?  Este é o objetivo do projeto Perf4j:

O Perf4J é para o System.currentTimeMillis() o mesmo que log4j é para o System.out.println()

 Com este objetivo em mente, o Perf4J fornece uma impressionante lista de funcionalidades:

  • Um mecanismo simples de stop watch para declarações de tempo.
  • Uma ferramenta de linha de comando para parser de arquivos de log que gera estatísticas agregadas e gráficos de performance.
  • Fácil integração com os mais frameworks mais comuns de logging: log4j, java.util.logging, Apache Commons Logging e SLF4J.
  • Appenders Log4j customizados para gerar estatísticas e gráficos em uma aplicação em execução (em breve handlers java.util.logging customizados).
  • A habilidade para expor estatísticas de performance como atributos JMX, e enviar notificações quando as estatísticas excedem determinados limites.
  • Um servlet para expor os gráficos de performance em uma aplicação web.
  • Uma annotation @Profiled e um conjunto de aspectos customizados que permite declarações de tempo não intrusivas quando combinado com um framework AOP tal como AspectJ ou Spring AOP.
  • Uma arquitetura extensível.

A InfoQ conversou com Alex Devine, um dos líderes do projeto Perf4j, que explicou como surgiu o Perf4j:

Percebendo que o problema de rastreio de performance e gerenciamento afetaria muito a cada projeto em nossa empresa (e, na verdade, quase todo servidor baseado, aplicações distribuídas), nós decidimos construir e produzir uma biblioteca de performance padrão, que depois tornou-se Perf4J.

"Há alguns problemas de performance delicados que o Perf4j pode ajudar a resolver":

O Perf4J é bem adequado para detectar problemas de performance baixa em aplicações orientadas a serviços e altamente distribuidas. Por exemplo, na Homeway um único acesso de uma de nossos resultados das páginas de busca em uma chamada do servidor de front-end, que faz chamadas ao banco de dados além de chamar o serviço de buscar e um servidor sobre HTTP. O serviço de busca por si só agrega resultados de vários nós. Se a performance do ambiente de produção cair, é muito mais fácil rapidamente apontar o componente problemático usando o Perf4j.

Isso nos leva à próxima questão "O Perf4j pode ser usado em um ambiente de produção?"

O Perf4j foi definitivamente desenhado para ser usado em ambiente de produção. De fato, frequentemente tudo parece uma maravilha no ambiente de teste só para se arrastar miseravelmente em produção; ter o monitoramente configurado ANTES de um grande problema de performance é crucial para rastrear o problema.

Para overheade de performance, Alex acrescentou:

O overhead é parecido com logging, já que iniciar e parar um StopWatch essencialmente a mesma coisa que você faria se você chamasse System.currentTimeMillis() antes e depois do código a ser monitorado e então colocasse isso no log. Assim, de forma similar, o overhead depende dos appenders que você anexou. O design do AsyncCoalescingStatisticsAppender é o que empurra a mensagem de log em uma fila que é esvaziada pelos appenders em uma thread separada, então quando os appenders de downstream tem muito trabalho, isso não afeta a execução da thread principal. Além disso, se você está usando a annotation @Profile com interlaçamento de load-time, você pode determinar quais métodos você quer que sejam monitorados em runtime. Em cada caso há absolutamente zero de overhead para os métodos que você não monitora.

E o que vem em seguida:

Nós queremos habilitar profiling de runtime mesmo se o código a ser monitorado não possua StopWatches ou annotations @Profiled. Isso é, eu quero permitir aos desenvolvedores especificar métodos específicos para serem monitorados no arquivo aop.xml ou na configuração de uma aplicação Spring. Isso permitiria a você, por exemplo, monitorar bibliotecas de terceiros que não conhecem o Perf4J e isso remove completamente todas as declarações de profiling do código fonte.

O Perf4j pode ser baixado de http://perf4j.org.

Avalie esse artigo

Relevância
Estilo/Redação

Conteúdo educacional

BT