> Java > java지도 시간 > 본문

자바 힙 덤프

WBOY
풀어 주다: 2024-08-30 15:14:19
원래의
821명이 탐색했습니다.

Java에서 힙 덤프는 특정 순간에 Java Virtual Machine의 메모리에 존재하는 전체 객체의 스냅샷을 제공합니다. 힙 덤프는 메모리 누수 문제를 해결하고 다양한 Java 애플리케이션에서 메모리 사용을 최적화하는 데 유용합니다. 주소, 클래스 이름, 유형, 다른 개체에 대한 참조와 같은 각 인스턴스의 세부 정보는 힙 덤프에 기록됩니다. 힙 덤프에는 Portable Heap Dump 형식, 바이너리 형식 및 ASCII 텍스트의 클래식 형식과 같은 두 가지 형식이 있습니다. 아래 섹션에서는 힙 덤프를 생성하는 다양한 도구와 기술을 살펴보겠습니다.

무료 소프트웨어 개발 과정 시작

웹 개발, 프로그래밍 언어, 소프트웨어 테스팅 등

힙 덤프 형식

  • 이식 가능한 힙 덤프(PHD) 형식: 이 형식에서 덤프 파일은 헤더 섹션과 본문 섹션으로 구성됩니다. 덤프 파일의 본문 섹션에는 개체, 클래스 레코드 또는 배열에 대한 세부 정보가 포함되어 있습니다. 파일 형식을 설명하기 위해 기본 숫자를 사용합니다.
  • 클래식 힙 덤프 형식: 이 덤프 형식은 EBCDIC로 인코딩된 z/OS를 제외한 거의 모든 플랫폼에서 ASCII 텍스트로 생성됩니다.

힙 덤프를 사용하는 이유와 용도는 무엇인가요?

일반적으로 이 힙 덤프는 우리가 사용하는 Java 애플리케이션에서 예상보다 많은 메모리를 차지하거나 OutOfMemoryError로 인해 애플리케이션이 충돌합니다. 힙 덤프를 분석하면 이상 현상의 근본 원인을 파악하는 데 도움이 됩니다. 이 외에도 힙 덤프를 사용하면 각 클래스의 메모리 사용량, 각 클래스의 개체 수 등과 같은 세부 정보를 식별할 수 있습니다. 또한 미세한 세부 정보를 캡처할 수 있으며 개인이 차지하는 메모리 양도 확인할 수 있습니다. 애플리케이션에 존재하는 Java 객체도 찾을 수 있습니다. 이 정보는 메모리 누수 문제를 일으키는 실제 코드를 식별하는 데 도움이 됩니다.

도구 및 기술

아래에 언급된 도구와 기술은 다음과 같습니다

1. JDK 도구

힙 덤프는 JDK 홈 디렉터리 내의 bin 폴더에 있는 JDK의 다양한 도구를 사용하여 캡처할 수 있습니다. 이를 위해 디렉토리가 시스템 경로에 존재하므로 명령줄을 사용할 수 있습니다.

jmap

jmap은 실행 중인 JVM에서 메모리 통계를 인쇄하는 원격 프로세스는 물론 로컬 프로세스에서도 사용할 수 있는 도구입니다.

jmap을 사용하여 힙 덤프를 생성하려면 아래와 같이 dump 옵션을 사용할 수 있습니다.

jmap -dump:[live] , format = b , file=< path of the file > <process id>
로그인 후 복사
  • live: 선택적 매개변수입니다. 이것이 설정된 경우 활성 참조만 있는 개체가 인쇄됩니다
  • format=b: 덤프 파일 형식이 바이너리라고 언급합니다.
  • 파일: 생성된 덤프를 쓸 수 있는 파일
  • PID: Java 프로세스 ID
  • jcmd

jcmd는 Java Virtual Machine에 명령 요청을 보내는 도구입니다. 또한 이는 Java 프로세스가 실행되는 시스템에 있어야 합니다.

힙 덤프를 가져오려면 아래와 같이 출력의 pid와 파일 경로만 언급하면 ​​되는 GC.heap_dump 명령을 사용할 수 있습니다.

jcmd < pid > GC.heap_dump < path of the file >
로그인 후 복사
JVisualVM

JVisualVM은 Java 애플리케이션을 모니터링, 문제 해결 및 프로파일링할 수 있는 간단하고 직관적인 그래픽 사용자 인터페이스를 갖춘 도구입니다. 이를 사용하여 힙 덤프를 생성하려면 Java 프로세스를 마우스 오른쪽 버튼으로 클릭하고 “Heap Dump” 옵션을 선택해야 합니다. 이 작업이 완료되면 도구가 힙 덤프를 생성하고 새 탭에서 열립니다.

2. 힙 덤프 자동 생성

위에서 언급한 수동 기술을 사용하는 대신 명령줄 옵션 HeapDumpOnOutOfMemoryError를 사용하여 java.lang.OutOfMemoryError가 발생하면 자동으로 힙 덤프를 생성합니다.

java - XX:+HeapDumpOnOutOfMemoryError
로그인 후 복사

java_pid.hprof는 기본적으로 dump를 저장하는 파일로, 애플리케이션이 실행되는 디렉터리에 있습니다.

기본 경로 대신 다른 파일 경로를 사용할 수도 있으며, 이를 위해 아래와 같이 HeapDumpPath 옵션을 사용할 수 있습니다.

java -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=< file_path >
로그인 후 복사

따라서 애플리케이션이 이런 방식으로 메모리 중단을 실행하면 힙 덤프로 구성된 생성된 파일에서 로그를 볼 수 있습니다.

3. JMX

여기에서는 2개의 매개변수를 허용하는 dumpHeap 기술을 생성하는 HotSpotDiagnostic MBean이 사용됩니다.

다음과 같습니다.

outputFile은 생성된 덤프의 파일 경로입니다. 파일 확장자가 hprof인지 확인하세요.

live는 jmap의 것과 유사합니다. 이것이 설정된 경우 활성 참조만 있는 개체가 인쇄됩니다

힙 덤프를 캡처하기 위해 이 메서드를 호출하는 두 가지 기술을 살펴보겠습니다.

J콘솔

JConsole과 같은 JMX 클라이언트는 HotSpotDiagnostic MBean을 사용하는 가장 간단한 방법입니다. JConsole이 열리고 실행 중인 Java 프로세스에 연결된 경우 MBean 탭으로 이동하여 com.sun.management 아래에 있는 HotSpotDiagnostic을 식별합니다. Operation 내부에는 앞서 설명한 dumpHeap 메소드를 찾을 수 있습니다. dumpHeap 작업을 수행하려면 outputFile 매개변수를 지정하고 p0 및 p1 텍스트 필드로 사용하세요.

프로그래밍 방식

JConsole과 유사하게 HotSpotDiagnostic MBean은 Java 코드에서 프로그램을 통해 호출하여 사용할 수 있습니다. 이를 위해 MBeanServer 인스턴스는 애플리케이션에 등록된 MBean을 가져와야 합니다. 이 작업이 완료되면 HotSpotDiagnosticMXBean의 인스턴스가 필요하며 해당 인스턴스의 dumpHeap 메소드를 호출해야 합니다.

4. IBM 관리 콘솔

사용 중인 애플리케이션이 IBM Websphere Application Server에서 실행된다고 가정해 보겠습니다. 관리 콘솔은 힙을 생성할 수 있습니다. 먼저 관리 콘솔의 탐색 창에서 문제 해결을 선택하고 Java 덤프 및 코어를 선택합니다. 이 작업이 완료되면 힙 덤프를 생성해야 하는 서버 이름을 선택합니다. 그런 다음 힙 덤프를 클릭하여 언급된 서버에 대한 힙 덤프를 생성합니다. wsadmin을 사용하여 힙 덤프를 생성할 수도 있습니다.

위 내용은 자바 힙 덤프의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿