jmapヒープダンプユーティリティのオプション "-J-d64"は何をしますか?

マニュアルページには

特定のプロセスが64ビットVM上で実行されている場合は、-J-d64オプションを指定する必要があります。

以上です。いくつかのヒープ・ダンプ・ハウトは説明なしでそれを含んでいます。

具体的には、そのオプションがヒープ・ダンプを破損している可能性があることを指定していないかどうかを判断しようとしています(jhatはそれらを読み取ることができません)。盲目的に実験するのはコストがかかります。ヒープが大きく、システムが稼動しているため、稼働中にダンプが必要な特定のポイントがあります。

2

1 答え

jmap のヘルプメッセージのスニペット:

λ > jmap 
Usage:
    jmap [option] 
        (to connect to running process)
    jmap [option] 
        (to connect to a core file)
    jmap [option] [[email protected]]
        (to connect to remote debug server)

where 
               to print same info as Solaris pmap
    -heap                to print java heap summary
    ... stuff ...
    -J             to pass  directly to the runtime system

つまり、 -J フラグが引数をJVMに直接渡すことがわかります。

jvm ヘルプメッセージを見てください:

λ > java
Usage: java [-options] class [args...]
           (to execute a class)
   or  java [-options] -jar jarfile [args...]
           (to execute a jar file)

where options include:
    -d32          use a 32-bit data model if available
    -d64          use a 64-bit data model if available (implies -server, only for x86_64)

したがって、 jmap -J-d64 は、32ビットの代わりに64ビットモデルを使用して java -d64 を開始するように jmap

jmap を実行しているプロセスが64ビットJVMでない場合は、 -J-d64 引数を渡さないでください。

トラブルシューティングのために jmap / jhat

あなたが壊れていると言うと、実際に jhat が壊れたヒープダンプを報告しているということですか?それとも、ヒープダンプが大きすぎて読み込めるからですか? jhat は、ダンプ全体をメモリにロードしようとします。そのため、ダンプのサイズ以上の空きメモリが必要です。ヒープ領域を増やすには、 -XmxjhatJ-d64 に指定する必要があります。

私が使用するはるかに優れた代替手段は、 Eclipse Memory Analyzer Tool です。これは、ヒープ・ダンプを選択的にロードしますすべてをプリロードするよりも。 jhat よりも6 + GBのヒープダンプではるかに優れていました。

4
追加された