IT TIP

자바에서 jmap을 사용하여 힙 덤프를 분석하는 방법

itqueen 2021. 1. 6. 20:37
반응형

자바에서 jmap을 사용하여 힙 덤프를 분석하는 방법


아래 명령을 사용하여 힙 덤프를 만들고 있습니다.

jmap -dump:file=DumpFile.txt <process-id>

생성 된 파일 (DumpFile.txt)을 열었지만 읽을 수있는 형식이 아닙니다. 생성 된 파일의 데이터 분석 방법을 알려주세요.


jmap -heap:format=b <process-id>경로없이 사용해야 합니다. 따라서 열 수있는 * .bin 파일이 생성됩니다 jvisualvm.exe(jmap과 동일한 경로). 이러한 덤프 파일을 여는 것은 훌륭한 도구입니다.


당신은 사용할 수 있습니다 jhat생성 된 파일을 읽을 수 (자바 힙 분석 도구) :

jhat [ options ] <heap-dump-file>

jhat 명령은 자바 힙 덤프 파일을 구문 분석하고 웹 서버를 시작합니다. jhat을 사용하면 선호하는 웹 브라우저를 사용하여 힙 덤프를 검색 할 수 있습니다.

당신이해야합니다 hprof바이너리 형식의 출력으로 구문 분석 할 수 있어야합니다 jhat. format=b옵션을 사용 하여이 형식으로 덤프를 생성 할 수 있습니다 .

-dump:format=b,file=<filename>

대답하기에는 매우 늦었지만 잠시 살펴볼 가치가 있습니다. 자세히 이해하는 데 2 ​​분이면 충분합니다.

먼저이 자바 프로그램을 만듭니다.

import java.util.ArrayList;
import java.util.List;

public class GarbageCollectionAnalysisExample{
    public static void main(String[] args) {
           List<String> l = new ArrayList<String>();
           for (int i = 0; i < 100000000; i++) {
                  l = new ArrayList<String>(); //Memory leak
                  System.out.println(l);
           }
           System.out.println("Done");
    }
}

jps사용 하여 vmid (가상 머신 ID, 즉 JVM ID)를 찾습니다.

CMD로 이동하여 아래 명령을 입력하십시오.>

C:\>jps
18588 Jps
17252 GarbageCollectionAnalysisExample
16048
2084 Main

17252는 우리가 필요로하는 vmid입니다.

이제 jmap과 jhat을 사용하는 방법을 배웁니다.

jmap 사용-힙 덤프 생성

jmap에 대한 Java 문서에서 "jmap은 지정된 프로세스 또는 코어 파일 또는 원격 디버그 서버의 공유 객체 메모리 맵 또는 힙 메모리 세부 사항을 인쇄합니다."

다음 명령을 사용하여 힙 덤프 생성>

C:\>jmap -dump:file=E:\heapDump.jmap 17252
Dumping heap to E:\heapDump.jmap ...
Heap dump file created

17252는 vmid (위에서 선택)입니다.

힙 덤프는 E : \ heapDump.jmap에 생성됩니다.

이제 Jhat Jhat 을 사용하여 Java에서 가비지 수집 덤프를 분석합니다.

C:\>jhat E:\heapDump.jmap
Reading from E:\heapDump.jmap...
Dump file created Mon Nov 07 23:59:19 IST 2016
Snapshot read, resolving...
Resolving 241865 objects...
Chasing references, expect 48 dots................................................
Eliminating duplicate references................................................
Snapshot resolved.
Started HTTP server on port 7000
Server is ready.

By default, it will start http server on port 7000. Then we will go to http://localhost:7000/

Courtesy : JMAP, How to monitor and analyze the garbage collection in 10 ways


If you use Eclipse as your IDE I would recommend the excellent eclipse plugin memory analyzer

Another option is to use JVisualVM, it can read (and create) heap dumps as well, and is shipped with every JDK. You can find it in the bin directory of your JDK.


VisualVm does not come with Apple JDK. You can use VisualVM Mac Application bundle(dmg) as a separate application, to compensate for that.


MAT, jprofiler,jhat are possible options. since jhat comes with jdk, you can easily launch it to do some basic analysis. check this out

ReferenceURL : https://stackoverflow.com/questions/15130956/how-to-analyse-the-heap-dump-using-jmap-in-java

반응형