Análise de desempenho para uma aplicação java

Preciso de optimizar uma aplicação Java. Faz algumas chamadas de terceiros. Eu preciso de alguma boa ferramenta para medir com precisão o tempo tomado pelas chamadas API individuais. Para dar uma idéia da complexidade- a aplicação leva um arquivo de fonte de dados contendo 1 milhão de linhas, e leva cerca de uma hora para completar o processamento. Como parte do processamento, ele faz algumas chamadas de terceiros (incluindo algumas chamadas de rede). Preciso de identificar que chamadas estão a demorar mais tempo do que outras, e com base nisso, descubra uma maneira de otimizar a aplicação.

Todas as sugestões seriam apreciadas.

Author: Varun Achar, 2010-06-14

8 answers

Posso recomendar JVisualVM . É uma grande ferramenta de monitoramento / perfil que está junto com o Oracle/Sun JDK. Ligue-o, ligue-se à sua aplicação e inicie o perfil do CPU. Você deve obter grandes histogramas sobre onde o tempo é gasto.

Começar com o VisualVM tem um grande elenco de tela mostrando você como trabalhar com ele.

Imagem de Ecrã:

VisualVM screenshot


Outra alternativa mais rudimentar é ir com o {[[0]} opção da linha de comandos:

-Xprof

Traça o perfil do programa em execução, e envia os dados de análise para saída padrão. Esta opção é fornecida como um utilitário que é útil no desenvolvimento do programa e não se destina a ser utilizado em sistemas de produção.

 27
Author: aioobe, 2017-08-23 20:38:58

Tenho usado o teu Kit Algumas vezes e que muito feliz com ele. No entanto, nunca perfilei uma operação de longa duração.

O processamento é o mesmo para cada linha? Nesse caso, o tamanho do arquivo de entrada realmente não importa. Você poderia traçar um perfil de um subconjunto para descobrir quais chamadas são caras.

 7
Author: ewernli, 2010-06-14 07:39:00
Só queria mencionar a ferramenta de inspecção. Recentemente tornou - se completamente open source (https://github.com/inspectIT/inspectIT . fornece um gráfico de chamadas completo e detalhado com informação contextual, existem muitos fora da caixa sensor para chamadas de banco de dados, monitorização http, excepções, etc.

As costuras são perfeitas para o seu estojo de uso..

 5
Author: Ivan Senic, 2015-08-17 12:31:20
Tenta o software Panorâmico Da OPNET.
 2
Author: Andy Fields, 2010-06-21 05:08:01

Soa como um normal profiler não pode ser a ferramenta certa, neste caso, uma vez que está voltada para medir o tempo de CPU tomadas pelo programa que está sendo perfilado, ao invés de incluir externo APIs que ele chama, e eles tendem a incorrer em uma alta sobrecarga de seus próprios e recolher uma grande quantidade de dados que provavelmente iria sobrecarregar o sistema se for deixado em execução por um longo tempo.

Se você realmente precisa coletar dados de desempenho durante tanto tempo, e principalmente para chamadas externas, então Perf4J é provavelmente uma ferramenta melhor.
 1
Author: Michael Borgwardt, 2010-06-14 07:51:57
No nosso escritório usamos o teu perfil diário. É realmente leve e serve a maioria dos casos de Uso relacionados ao desempenho que tivemos. Mas também usei VM Visual. É livre e rápido. Você pode primeiro querer dar VM Visual uma tentativa antes de ir para YourKit (YourKit não é freeware).
 1
Author: arcamax, 2010-06-14 08:37:21
O Visualvm (parte do SDK) e o Java 7 podem produzir perfis detalhados.
 0
Author: s5804, 2010-06-14 07:42:51

Eu uso profiler em NetBeans (é realmente brilhante e já está incorporado, não há necessidade de instalar plugin) ou JVisualVM quando não está a usar NetBeans.

 0
Author: Xorty, 2010-06-14 08:53:19