JAVA 메모리 분석 : 덤프 메모리 오버 플로우 스냅 샷 분석 기반

자바 메모리 분석

소개

Java 프로그램이 서버 측에서 실행 중일 때 오랫동안 실행되거나 액세스 양이 많을 때 메모리 오버플로가 발생합니다.
이때 JVM의 메모리 분석을 수행하지 않으면 문제를 찾을 수 없으므로 서버를 다시 시작하더라도 후속 작업에서 여전히 메모리 오버플로를 예측할 수 있습니다.
그런 다음 실제 상황을 결합하고 몇 가지 예제를 사용하여 메모리 오버플로 상황과이를 분석하는 방법을 시뮬레이션합니다.

본문

1. 메모리 오버 플로우 시뮬레이션

1.1 새로운 빈 객체 생성
package com.moonl.jvm.beans;

public class MemoryOverflow {
    
    
}
1.2 프로그램 실행을위한 주요 방법 구축
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 런타임 메모리 설정

여기에 사진 설명 삽입
여기서 런타임 메모리를 21M으로 설정하고
여기에 사진 설명 삽입
이제 프로그램을 실행하기 시작합니다.
이때 매우 간단한 코드 인 무한 루프가 계속해서 객체를 생성하여 목록에 추가합니다. 이때 오류 메시지와 메모리 오버플로가 발견되었습니다.
프로덕션 환경에서 시스템 백그라운드의 메모리 오버플로가 시뮬레이션되었습니다.
여기에 사진 설명 삽입

2. 위치 문제

상대적으로 큰 시스템에 직면 한 프로덕션 환경에서 메모리 오버 플로우가 발생하면 일반적으로 로그를 통해 메모리 오버 플로우 위치를 찾는 것이 불가능하므로 런타임에 매개 변수를 추가하여 런타임 메모리 오버 플로우의 스냅 샷을 생성해야합니다. .
-Xms21m -Xmx21m -XX : + HeapDumpOnOutOfMemoryError (
그림 참조) :
여기에 사진 설명 삽입

실행 후 그림과 같이 나타납니다
여기에 사진 설명 삽입
. 프로그램의 프로젝트 카탈로그 보고서에서 방금 생성 된 파일의 스냅 샷을 찾을 수 있지만 파일을 읽는 방법은 쿼리를 위해 별도의 도구를 다운로드해야합니다.
내가 여기서 사용하는 것은 : Jprofiler는 누구나 다운로드 할 수 있으며 설치 프로세스는 반복 되지 않습니다.
여기에 사진 설명 삽입

3. 메모리 오버 플로우 원인 분석

Jprofiler-Session-Open Snapshot
여기에 사진 설명 삽입
대화 상자를 연 후 분석 할 파일
여기에 사진 설명 삽입
선택하면 메모리 오버플로의 원인을 확인할 수 있습니다. 물론 프로덕션 환경에서 메모리 오버플로를 분석 할 때 조사 및 분석 할 장소가 더 많이 있습니다.
여기에 사진 설명 삽입

추신

요약하면,이 기사에서 설명하는 방법은 vm 옵션
에 HeapDumpOnOutOfMemoryError 추가하는 것입니다 : -Xms21m -Xmx21m -XX : + HeapDumpOnOutOfMemoryError . 다음 호에서는 idea와 jprofiler를 통한 통합에 대해 설명합니다.
메모리 작동 상태.
다음 기사 -JAVA 메모리 분석 : idea는 jprofiler를 통합하여 JVM 메모리 사용량을 확인합니다.

추천

출처blog.csdn.net/liaoyue11/article/details/110822020