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.
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.
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.
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.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.
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: