Análise de memória JAVA: com base na análise de instantâneo de estouro de memória de despejo

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

Insira a descrição da imagem aqui
Aqui, definimos a memória de tempo de execução para 21M e
Insira a descrição da imagem aqui
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.
Insira a descrição da imagem aqui

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:
Insira a descrição da imagem aqui

Depois de executado, ele aparecerá conforme mostrado na figura:
Insira a descrição da imagem aqui
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á .
Insira a descrição da imagem aqui

3. Analise a causa do estouro de memória

Depois de abrir a
Insira a descrição da imagem aqui
caixa de diálogo Jprofiler — Session — open Snapshot , selecione o arquivo
Insira a descrição da imagem aqui
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.
Insira a descrição da imagem aqui

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

Acho que você gosta

Origin blog.csdn.net/liaoyue11/article/details/110822020
Recomendado
Clasificación