2011-10-27 14 views
2

manページには、指定されたプロセスが64ビットVM上で実行されている場合、あなたは-J-D64オプションjmapヒープダンプユーティリティのオプション "-J-d64"は何をしますか?

を指定する必要があり、それはそれだ

を言います。いくつかのヒープダンプのハウツーには説明が含まれていません。

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

答えて

4

jmapのヘルプメッセージの抜粋:

λ > jmap 
Usage: 
    jmap [option] <pid> 
     (to connect to running process) 
    jmap [option] <executable <core> 
     (to connect to a core file) 
    jmap [option] [[email protected]]<remote server IP or hostname> 
     (to connect to remote debug server) 

where <option> is one of: 
    <none>    to print same info as Solaris pmap 
    -heap    to print java heap summary 
    ... stuff ... 
    -J<flag>    to pass <flag> 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は本当に64ビットのモデルの代わりに、32ビットを使用して、java -d64を開始するjmapを語っています。

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

編集は私が

をトラブルシューティングするためにjmap/jhatの多くを行っているので、あなたが破損していると言うとき、あなたはjhatを意味しています実際に破損したヒープ・ダンプを報告しますか?それとも、ヒープダンプが大きすぎて読み込めるからですか? jhatは、ダンプ全体をメモリにロードしようとします。したがって、ダンプのサイズ以上の空きメモリが必要です。ヒープ領域を増やすには、-XmxjhatJ-d64を指定する必要があります。

私が使用するはるかに良い代替はEclipse Memory Analyzer Toolです。これは、すべてをプリロードするのではなく、ヒープダンプを選択的に読み込みます。私にとっては、6 GB以上のヒープダンプでは、jhatよりもはるかに優れていました。

関連する問題