Javaヒープダンプファイル(jmapによって作成された)を解析および分析するプログラム(できればjavaで)を作成したいと思います。すでにそうしている素晴らしいツール(jhat、eclipseのMATなど)がたくさんあることは知っていますが、アプリケーションの特定の観点からヒープを分析したいと思います。
ヒープダンプファイルの構造、読み取り方法の例などについては、どこで読むことができますか?それを検索するのに役立つものは見つかりませんでした...
どうもありがとう。
Eclipseバージョンでは次のことが行われました:Luna Service Release 1(4.4.1)およびEclipseMemoryAnalyzerバージョン1.4.0
ファイル->新規->その他->プラグインプロジェクト
名前:MAT拡張
次
plugin.xmlを開きます
@CommandName("MyQuery") //for the command line interface
@Name("My Query") //display name for the GUI
@Category("Custom Queries") //list this Query will be put under in the GUI
@Help("This is my first query.") //help displayed
public class MyQuery implements IQuery
{
public MyQuery{}
@Argument //snapshot will be populated before the call to execute happens
public ISnapshot snapshot;
/*
* execute : only method overridden from IQuery
* Prints out "My first query." to the output file.
*/
@Override
public IResult execute(IProgressListener arg0) throws Exception
{
CharArrayWriter outWriter = new CharArrayWriter(100);
PrintWriter out = new PrintWriter(outWriter);
SnapshotInfo snapshotInfo = snapshot.getSnapshotInfo();
out.println("Used Heap Size: " + snapshotInfo.getUsedHeapSize());
out.println("My first query.")
return new TextResult(outWriter.toString(), false);
}
}
ctrl + shift + oは、正しい「インポート」ステートメントを生成します。開いたhprofファイルの上部にあるツールバーの[クエリブラウザを開く]にアクセスすると、MATGUI内でカスタムクエリにアクセスできます。
ヒープダンプからデータを抽出するために使用できる最も重要なインターフェイスは、ISnapshotです。ISnapshotはヒープダンプを表し、そこからオブジェクトとクラスを読み取ったり、オブジェクトのサイズを取得したりするためのさまざまなメソッドを提供します…</ p>
ISnapshotのインスタンスを取得するには、SnapshotFactoryクラスの静的メソッドを使用できます。ただし、これは、APIを使用してMemoryAnalyzerから独立したツールを実装する場合にのみ必要です。MATに拡張機能を記述している場合、コーディングは、インジェクションまたはメソッドパラメーターとして、すでに開かれているヒープダンプに対応するインスタンスを取得します。
プログラムに通常のレポートを生成させる場合は、 EclipseのMATツールをダウンロードするとParseHeapDumpというコマンドラインユーティリティを使用できます。MATが保存するすべての情報の有用なhtmlダンプを取得できるようになります。
> ParseHeapDump <heap dump> org.eclipse.mat.api:suspects org.eclipse.mat.api:top_components org.eclipse.mat.api:overview #will dump out all general reports available through MAT
うまくいけば、これはあなたが始めるのに十分な情報です。
私はjhatに精通していませんが、EclipseのMATはオープンソースです。彼らのSVNリンクが利用可能であり、おそらくあなたは彼らのパーサーのためにそれを調べることができ、おそらくそれを使用することさえできます。