Análise de memória Java
introdução
Quando um programa Java está sendo executado no lado do servidor, ele encontrará um estouro de memória quando for executado por muito tempo ou quando a quantidade de acesso for grande.
Neste momento, se não realizarmos a análise de memória JVM, não seremos capazes de localizar o problema, portanto, mesmo se reiniciarmos o servidor, ainda iremos prever o estouro de memória no processo de operação subsequente.
Em seguida, combinamos a situação real e usamos alguns exemplos para simular a situação de estouro de memória e como analisá-la.
texto
1. Simular estouro de memória
1.1 Criar um novo objeto bean
package com.moonl.jvm.beans;
public class MemoryOverflow {
}
1.2 Construir um método principal para executar o programa
package com.moonl.jvm;
import com.moonl.jvm.beans.MemoryOverflow;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.ArrayList;
import java.util.List;
@SpringBootTest
public class MemoryOverflowTest {
public static void main(String[] args) {
List<MemoryOverflow> list = new ArrayList<>();
while (true){
list.add(new MemoryOverflow());
}
}
}
1.3 Definir a memória de tempo de execução
Aqui, definimos a memória de tempo de execução para 21M e
agora começamos a executar o programa.
Nesse momento, um código muito simples, loop infinito, continuará a criar um objeto e o adicionará à lista. Nesse momento, encontramos uma mensagem de erro e estouro de memória.
Em nosso ambiente de produção, o estouro de memória no fundo do sistema foi simulado.
2. Problema de posicionamento
Quando ocorre um estouro de memória em nosso ambiente de produção, diante de sistemas relativamente grandes, geralmente é impossível localizar o local do estouro de memória por meio do log, portanto, precisamos adicionar um parâmetro em tempo de execução para gerar um instantâneo do estouro de memória em tempo de execução .
-Xms21m -Xmx21m -XX: + HeapDumpOnOutOfMemoryError
conforme mostrado na figura:
Depois de executado, ele aparecerá conforme mostrado na figura:
no relatório do diretório do projeto do programa, podemos encontrar o instantâneo do arquivo que acabou de ser gerado, mas a forma de ler o arquivo requer uma ferramenta separada para ser baixada para consulta.
O que eu uso aqui é: Jprofiler todos podem ir para baixar, o processo de instalação não se repetirá .
3. Analise a causa do estouro de memória
Depois de abrir a
caixa de diálogo Jprofiler — Session — open Snapshot , selecione o arquivo
a ser analisado e você pode ver o que causou o estouro de memória. Claro, ao analisar o estouro de memória no ambiente de produção, há mais lugares para investigar e analisar.
pós-escrito
Resumindo, o método descrito neste artigo é
adicionar HeapDumpOnOutOfMemoryError nas opções de vm: -Xms21m -Xmx21m -XX: + HeapDumpOnOutOfMemoryError e gerar um log de instantâneo. Na próxima edição, explicaremos a integração por meio de ideia e jprofiler, consulte
Status de operação da memória.
Próximo artigo - Análise de memória JAVA: ideia integra jprofiler para visualizar o uso de memória JVM