web-dev-qa-db-ja.com

javaのjmapを使用してヒープダ​​ンプを分析する方法

私は以下のコマンドを使用してヒープダ​​ンプを作成しています:

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

生成されたファイル-DumpFile.txtを開きましたが、読み取り可能な形式ではありません。生成されたファイルのデータを分析する方法を教えてください。

55
Chaitanya

パスなしでjmap -heap:format=b <process-id>を使用する必要があります。したがって、jvisualvm.exe(jmapと同じパス)で開くことができる* .binファイルを作成します。このようなダンプファイルを開くのに最適なツールです。

53
yves.beutler

jhat (Javaヒープ分析ツール)を使用して、生成されたファイルを読み取ることができます。

jhat [ options ] <heap-dump-file>

Jhatコマンドは、Javaヒープダンプファイルを解析し、Webサーバーを起動します。 jhatを使用すると、お気に入りのWebブラウザーを使用してヒープダ​​ンプを参照できます。

hprofで解析できるようにするには、jhatバイナリ形式の出力が必要です。 format=bオプションを使用して、この形式でダンプを生成できます。

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

これに答えるのは非常に遅かったが、すぐに見る価値がある。詳細を理解するのに必要な時間はわずか2分です。

最初にこのJavaプログラムを作成します

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.

デフォルトでは、ポート7000でhttpサーバーを起動します。次に、 http:// localhost:7000 / に移動します。

礼儀: JMAPガベージコレクションを10の方法で監視および分析する方法

11
Ankit Mittal

EclipseをIDEとして使用する場合は、優れたEclipseプラグインをお勧めします メモリアナライザー

もう1つのオプションは、JVisualVMを使用することです。ヒープダンプも読み取る(および作成する)ことができ、すべてのJDKに同梱されています。 JDKのbinディレクトリにあります。

9
pushy

VisualVmにはApple JDKが付属していません。 VisualVM Mac Application bundle(dmg)を別のアプリケーションとして使用して、それを補うことができます。

5
kanaparthikiran

MAT、jprofiler、jhatは可能なオプションです。 jhatにはjdkが付属しているため、簡単に起動して基本的な分析を行うことができます。 チェックアウト

0
user1251323