Análise de perfis de aplicações Java

Estou à procura de um compilador de código Java que posso usar para traçar o perfil da minha aplicação (é um serviço que funciona na infra-estrutura) na produção (por isso, significa baixo sobre a cabeça, e não deve atrasar a minha aplicação). Primarily I want calling tree profiling, that is if a() calls b() and then b() calls c (), then how much time a() b() and c() took, both inclusively and exclusively.

já vi {[[0]} e jprofiler, mas isto não é o que eu estou procurando, porque eu não posso amarrar a minha produção aplicação para eles, pois vai causar um grande problema de desempenho.

Além disso, eu passei metrics (https://github.com/dropwizard/metrics ), mas não me dá uma funcionalidade para traçar o perfil da árvore de chamamento.

Callgrind (http://valgrind.org/docs/manual/cl-manual.html o tipo Biblioteca é o que eu preciso, uma vez que dá funcionalidade de análise de árvore de chamadas e opções avançadas como evitar ciclos de chamadas (recursão). Mas não tenho a certeza se o Callgrind pode ser usado em produção como ele descarrega dados quando o programa termina.

Alguém pode sugerir um perfil de árvore de boas ligações para java que possa ser usado na produção sem comprometer o desempenho?

Author: kc2001, 2014-03-07

4 answers

Dê uma olhada em Java Mission Control em conjunto com Flight Recorder . Começando com o lançamento do Oracle JDK 7 Update 40 (7u40), o Java Mission Control está junto com o HotSpot JVM, por isso é altamente integrado e pretende ter pequenos efeitos sobre o desempenho em tempo de execução. Eu apenas comecei a olhar para ele, e eu vejo alguma funcionalidade de árvore de chamadas.

enter image description here

 12
Author: kc2001, 2016-12-01 18:56:38
Em geral, não (ou não recomendarei) profilers que instrumentem a sua aplicação. Instrumentação significa sempre uma produção incontrolável.

O que podes usar é um profiler de amostras. Um analisador de amostras faz um instantâneo dos traços da pilha em um intervalo controlável. O que você não recebe é Contagem de chamadas, mas, depois de algum tempo de execução, você tem uma boa visão geral onde você tem hotspots. Uma vez que você pode ajustar o intervalo de amostra do profiler você pode influenciar o por cima.

Um analisador de amostras utilizável é enviado com o JDK; veja a Página hprof na documentação java 7 . Antigamente existiam algumas ferramentas de análise gráfica para os traços de cpu hprof (não os traços de heap). Agora desapareceram. No entanto, você já pode trabalhar com o arquivo de texto gerado.

Dei uma vista de olhos nas coisas do Java Mission Control mencionadas acima. Penso que é bastante poderoso, satisfazerá muitas necessidades, e no Livro Branco dizem que tem apenas 2% acima. No entanto, não é totalmente isso que eu, pessoalmente, preciso ou quero. Para minhas aplicações é melhor ter um Perfil" light " habilitado o tempo todo.
 9
Author: cruftex, 2014-03-12 09:09:00

Amplificador Intel XE http://software.intel.com/en-us/intel-vtune-amplifier-xe tem baixa sobrecarga, se é que se nota. Ele usa a tecnologia de amostragem de chaminés para minimizar o impacto e pode anexar e destacar-se à execução de processos sem parar na produção. Você mesmo não precisa ter Fontes durante a análise de perfil, você pode mergulhar em fontes mais tarde após a navegação de resultados de desempenho offline.

 4
Author: Andrew, 2014-03-08 07:38:11
Não conheço nenhuma ferramenta que possa fazer perfis sem impacto no desempenho. Pode adicionar Registo aos métodos que lhe interessam. Certifique-se de incluir o carimbo de tempo no log; então você pode fazer o timing. Você também deve configurar a estrutura de registro para logar de forma assíncrona para reduzir a perda de desempenho.

Um tecelão de tempo de carga como AspectJ {[8] } é capaz de adicionar estas chamadas em tempo de execução, o que lhe permitiria seleccionar facilmente os métodos que você quer monitorar sem alterar o código fonte o tempo todo.

Se usar um aspecto around, poderá até adicionar registo de datas, para que não tenha de analisar os registos e tentar encontrar os registos correspondentes. Veja este post para mais detalhes .

Dá uma vista de olhos a perfspy (tutorial {[[8]}), ele já pode fazer fora da caixa o que você precisa.

Relacionado:

 1
Author: Aaron Digulla, 2017-05-23 11:53:24