2013-02-28 13 views
43

にjmapのを使用して、ヒープ・ダンプを分析する:は、どのようにコマンドの下に使用してヒープ・ダンプを作成していたJava

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

私が開いている生成されたファイル - DumpFile.txtそれが読める形式ではありません。 生成されたファイルのデータを分析する方法を教えてください。

+0

あなたは 'jmap -heap > DumpFile.txt'を試しましたか? –

+0

このファイルはEclipse MATで正常に開きます。ちょうど.hprof拡張子を与えてください – iTake

+0

http://stackoverflow.com/questions/185893/how-do-i-analyze-a-hprof-file – rogerdpack

答えて

31

あなたは、生成されたファイルを読み込むためにjhat(Javaヒープ解析ツール)を使用することができます。

jhat [ options ] <heap-dump-file> 

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

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

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

jhatコマンドを実行してヒープダンプファイルを解析していますが、以下のエラーが表示されています: 'Read from 447start.out ... java.io.IOException:認識できないマジックナンバー:1027423549 at com.sun.tools.hat.internal.parser.Reader.readFile (Reader.java:81) at com.sun.tools.hat.Main.main(Main.java:143) 'ここで447start.outはログファイルの名前です。 – Chaitanya

+0

'jmap -dump:format = b、file = ' –

+0

jhatはユーザーフレンドリーなツールではありません。 –

9

あなたのIDEとしてEclipseを使用している場合、私はプラグイン優れた日食をお勧めしますmemory analyzer

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

+0

ありがとう私は問題を分析するためにソフトウェアをダウンロードします。 – Chaitanya

0

MAT、jprofiler、jhatは可能なオプションです。 jhatにはjdkが付属しているので、簡単に起動して基本的な分析を行うことができます。 check this out

43

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

5

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

2

これには非常に遅れていますが、簡単に見ていきましょう。詳細を理解するのに2分しかかかりませんでした。

まず>

C:\>jps 
18588 Jps 
17252 GarbageCollectionAnalysisExample 
16048 
2084 Main 
コマンドVMID(仮想マシンIDすなわちJVMのID)

GoはCMDおよび以下を入力して検索し、この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は17252です。

今、私たちはjmapの使用方法を学び、

使用jmapのjhatます - jmapの 「共有jmapのプリントオブジェクトメモリマップまたはヒープメモリの詳細についてはJavaのドキュメントから

をダンプヒープを生成するために指定されたプロセスやコアファイルまたはヒープ・ダンプを生成するために、リモートデバッグサーバー」

次のコマンドを使用>

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/

礼儀:JMAPHow to monitor and analyze the garbage collection in 10 ways

関連する問題