A Java Virtual Machine (JVM) gera 3 artefatos críticos que são úteis para otimizar o desempenho e solucionar problemas de produção. Esses artefatos são:

  1. Registro de coleta de lixo (GC)
  2. Descarga de rosca
  3. Despejo de pilha

1. Registro de Coleta de Lixo

a) O que é um log de GC?

O GC Log contém informações relacionadas a eventos de coleta de lixo. Ele indicará quantos eventos de GC foram executados, que tipo de comando é esse comando de eventos de GC (ou seja, Young GC ou Full GC), quanto tempo cada evento de GC pausa a aplicação, quantos objetos cada evento de GC recuperou.

b) Qual é a aparência de um log do GC?

O arquivo de log de coleta de lixo de amostra pode ser encontrado aqui.

c) Onde os logs do GC são usados?

Os logs de coleta de lixo são usados ​​para estudar o GC do aplicativo e o desempenho da memória. Ele é usado para otimizar os tempos de pausa do GC, é usado para identificar o tamanho ideal de memória para seu aplicativo e também é usado para solucionar problemas relacionados à memória.

d) Como gerar um log de GC?

Você pode gerar logs de coleta de lixo passando os seguintes argumentos da JVM:

Nas versões Java até 8:

Na versão Java a partir de 9:

caminho do arquivo: é o local onde o arquivo de log da Coleta de Lixo será gravado.

e) Como entender um log de GC?

O formato do log de coleta de lixo varia dependendo de quem é seu fornecedor de JVM (Oracle, HP, IBM, Azul, ..), versão Java (1.5, 5, 6, 7, 8, 9, 10, 11, 12,…), lixo algoritmo de coleta (Serial, Paralelo, CMS, G1, Shenandoah, Z GC) e argumentos JVM que você passa. Assim, não há um formato padronizado disponível. No entanto, aqui está um tutorial em vídeo, que tenta ajudá-lo a entender o formato do arquivo de log do GC.

f) Quais ferramentas são usadas para analisar um registro de GC?

Existem várias ferramentas de análise de log de coleta de lixo. Alguns dos mais populares são fornecidos aqui: GCeasy, IBM GC & Memory visualizer, HP JMeter, Google Garbage Cat

2. Descarga de rosca

a) O que é um despejo de rosca?

Um dump de encadeamento é um instantâneo de todos os encadeamentos em execução no aplicativo em um determinado momento. Ele contém todas as informações sobre cada encadeamento no aplicativo, como estado do encadeamento, ID do encadeamento, ID nativo, nome do encadeamento, rastreamento de pilha e prioridade.

b) Como é um despejo de rosca?

Um exemplo de dump de encadeamento pode ser encontrado aqui.

c) Onde é usado um dump de rosca?

Os dumps de thread são usados ​​principalmente para solucionar problemas de produção, como picos de CPU, falta de resposta no aplicativo, tempo de resposta ruim, threads travados, alto consumo de memória.

d) Como gerar um Thread Dump?

Os dumps de thread podem ser capturados do aplicativo em execução usando 8 opções diferentes. A opção mais comum para fazer dump de encadeamento é usar a ferramenta ‘jstack’. A ferramenta jstack é enviada na pasta JDK_HOMEbin. Aqui está o comando que você precisa emitir para capturar o dump de encadeamento:

pid: é o Process Id do aplicativo, cujo dump de encadeamento deve ser capturado

caminho do arquivo: é o caminho do arquivo no qual o despejo de encadeamento será gravado.

e) Como entender um Thread Dump?

Aqui está uma palestra em vídeo que fornece uma boa visão geral detalhada sobre como entender os dumps de thread.

f) Quais ferramentas são usadas para analisar um despejo de thread?

Aqui estão as ferramentas de análise de dump de encadeamento mais usadas: fastThread, Samurai, IBM Thread & Monitor Analyzer, Visual VM

3. Despejo de pilha

a) O que é um Despejo de Heap?

Um despejo de heap é um instantâneo da memória do seu aplicativo em um determinado momento. Ele contém informações como quais são os objetos na memória, quais valores eles carregam, qual é seu tamanho, quais outros objetos eles referenciam.

b) Como é um Despejo de Heap?

Um exemplo de despejo de heap pode ser encontrado aqui. (Nota: Ele estará em formato binário. Então você realmente não pode lê-lo).

c) Onde é usado um despejo de pilha?

Despejos de heap são usados ​​principalmente para solucionar problemas relacionados à memória, problemas de OutOfMemoryError.

d) Como gerar um despejo de pilha?

O despejo de heap pode ser capturado do aplicativo em execução usando 7 opções diferentes. A opção mais comum para fazer dump de heap é usar a ferramenta ‘jmap’. A ferramenta jmap é enviada na pasta JDK_HOMEbin. Aqui está o comando que você precisa emitir para capturar:

pid: é o Java Process Id, cujo heap dump deve ser capturado

file-path: é o caminho do arquivo no qual o heap dump será gravado.

e) Como entender um Heap Dump?

Os arquivos de despejo de heap estão em formato binário e tendem a ser grandes. Além disso, seu formato carece muito de documentação. Assim, você deve usar as ferramentas de análise de despejo de heap (dadas na próxima pergunta) para analisá-las e entendê-las.

f) Quais ferramentas são usadas para analisar um despejo de pilha?

Aqui estão as ferramentas de análise de despejo de heap mais usadas: Eclipse MAT, HeapHero, JVisualVM.
Esperamos que este artigo aborde todos os métodos de Como analisar logs de coleta de lixo, Despejos de thread e Despejos de pilha. Se você achou este artigo realmente útil para você, compartilhe esta informação com seus amigos, parentes, familiares e outros. Nos vemos nos próximos posts com signalfix.net!