私は以下のコマンドを使用してヒープダンプを作成しています:
jmap -dump:file=DumpFile.txt <process-id>
生成されたファイル-DumpFile.txtを開きましたが、読み取り可能な形式ではありません。生成されたファイルのデータを分析する方法を教えてください。
パスなしでjmap -heap:format=b <process-id>
を使用する必要があります。したがって、jvisualvm.exe
(jmapと同じパス)で開くことができる* .binファイルを作成します。このようなダンプファイルを開くのに最適なツールです。
jhat
(Javaヒープ分析ツール)を使用して、生成されたファイルを読み取ることができます。
jhat [ options ] <heap-dump-file>
Jhatコマンドは、Javaヒープダンプファイルを解析し、Webサーバーを起動します。 jhatを使用すると、お気に入りのWebブラウザーを使用してヒープダンプを参照できます。
hprof
で解析できるようにするには、jhat
バイナリ形式の出力が必要です。 format=b
オプションを使用して、この形式でダンプを生成できます。
-dump:format=b,file=<filename>
これに答えるのは非常に遅かったが、すぐに見る価値がある。詳細を理解するのに必要な時間はわずか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 / に移動します。
EclipseをIDEとして使用する場合は、優れたEclipseプラグインをお勧めします メモリアナライザー
もう1つのオプションは、JVisualVMを使用することです。ヒープダンプも読み取る(および作成する)ことができ、すべてのJDKに同梱されています。 JDKのbinディレクトリにあります。
VisualVmにはApple JDKが付属していません。 VisualVM Mac Application bundle(dmg)を別のアプリケーションとして使用して、それを補うことができます。
MAT、jprofiler、jhatは可能なオプションです。 jhatにはjdkが付属しているため、簡単に起動して基本的な分析を行うことができます。 チェックアウト