>Lista de processos JVM a correr num tempo especificado.>
Figure 1- JVMs e os seus pids.
‘jps -l’ comando produz o nome completo do pacote para a classe principal da aplicação ou o nome completo do caminho para o arquivo JAR da aplicação.Consulte a documentação do jps para mais informações.
Depois disso podemos usar o comando ‘jstack’ para capturar os despejos de thread. Aqui está o comando que você precisa emitir para capturar threads dump:jstack <pid>. Aqui o pid é o Process ID da aplicação, cuja thread dump deve ser capturada. Então ‘jstack 13626’ na minha consola irá sair o seguinte log de dump de thread como mostrado na figura.
>
>
Builtin Profiling tools and their Implementation
Além destas existem várias ferramentas embutidas para fazer o perfil de JVM como Java VisualVM,Honest Profiler, Async Profiler e Java Mission Controller
Antes de entrar no fundo destes profilers, devemos conhecer o conceito de ‘Safe point’. JVM internamente cuida de muitas coisas para nós, tais como Coleta de Lixo e Compilação JIT. Portanto, a JVM também precisa de seu próprio tempo para resolver algumas coisas por si mesma, fora da aplicação. Algumas das coisas que a JVM pode fazer podem envolver um ponto seguro (incluindo a GC). Durante um safepoint, todos os threads rodando código Java são suspensos para que a JVM faça seu trabalho. A aplicação pára durante o tempo em que a JVM vai para um safepoint. Então alguns profilers sofrem com esses problemas de safepoint onde eles dão uma callback aos threads especificados, esses threads devem estar em um safepoint para responder a essa callback. Assim, isso afeta a performance.
Por outro lado, alguns profilers usam uma API interna openJDK chamada AsyncGetCallTrace (ASGT) para facilitar a coleta sem safepoint de traços de pilha. AsyncGetCallTrace NÃO é uma API JVM oficial. Para usar ASGT primeiro crie um agente JVMTI. A interface Java Virtual Machine Tool Interface (JVMTI) fornece uma interface de programação que permite a você, o desenvolvedor do software, criar agentes de software que podem monitorar e controlar suas aplicações da linguagem de programação Java.Certifique-se de que a linha interrompida está rodando no seu gerenciador de sinal e chame o AGCT. O profiler Honesto usa este ASGT para fazer o perfil .
O profiler Honesto tem duas partes para ele. Um agente C++ JVMTI que escreve um arquivo contendo todas as informações de perfil sobre a aplicação a qual o agente jvmti foi anexado. A segunda parte, é uma aplicação Java que faz um perfil baseado neste log que foi gerado anteriormente.
ASGT método será parecido com isto. AsyncGetCallTrace(ASGCT_CallTrace *trace,jint depth,void* ucontext). Devemos passar um ponteiro para o ASGT call trace para este método.
O problema com esta abordagem é que você obtém dados ligeiramente diferentes de um típico stack trace Java. O profiler tem que processá-lo e mapeá-lo para as linhas no código fonte para ser útil.
Async profiler é um baixo overhead sampling profiler que opera anexando um agente Java nativo a um processo JVM em execução e coletando os traços de pilha usando APIs específicas do HotSpot. O Async-profiler funciona apenas em GNU/Linux e MacOS, e no primeiro, ele também utiliza perf_events para escavar em código nativo. A abordagem geral é receber pilhas de chamadas geradas por perf_events e combiná-las com pilhas de chamadas geradas por AsyncGetCallTrace, a fim de produzir um perfil preciso tanto do Java quanto do código nativo. Ele usa a API perf_events para configurar a amostragem da CPU em um buffer de memória, e pede para que um sinal seja entregue quando uma amostra ocorrer. O manipulador do sinal então chama AGCT, e funde as duas pilhas: a pilha Java, capturada por AGCT, e a pilha nativa + kernel, capturada por perf_events. Para threads não-Java, apenas a pilha perf_events é mantida.
Java Mission Controller(JMC) dá um relatório detalhado de cada um dos threads específicos em cada JVM e sua porcentagem de consumo de CPU de uma maneira eficiente.Java Mission Control funciona interagindo com um agente JMX no JVM que tem um servidor MBean que se integra com a VM embutida e instrumentação de aplicação rodando o JVM. Essa é uma vantagem chave, pois realmente reduz os custos gerais da ferramenta, uma vez que está usando ganchos pré-existentes. Aqui não há nada que você precise instalar ou anexar à sua VM existente para que ela funcione. Com o Flight recorder, há algumas bandeiras que você precisa habilitar, mas nada para instalar. Inicie um terminal vá até seu diretório bin JDK e apenas digite jmc.JMC irá emitir uma GUI contendo suas JVMs em execução. Selecione o processo JVM que você precisa para traçar o perfil e começar a gravar especificando o tempo limite.