jcmd
ユーティリティを使用してJVMに診断コマンド・リクエストを送信し、JVMではこれらのリクエストを使用してJavaフライト記録の制御、トラブルシューティング、JVMおよびJavaアプリケーションの診断を行います。JVMが実行されているものと同じマシン上で使用され、JVMの起動で使用されたものと同じ有効なユーザーおよびグループ識別子を持っている必要があります。
jcmd
の構文および他の使用方法の詳細は、jcmd
コマンドのマニュアル・ページを参照してください。
特殊コマンドjcmd <process id/main class> PerfCounter.print
は、プロセス内のすべてのパフォーマンス・カウンタを出力します。
コマンドjcmd <process id/main class> <command> [options]
は、JVMに実際のコマンドを送信します。
例2-1に、jcmd
ユーティリティによるJVMへの診断コマンド・リクエストを示します。
例2-1 jcmdユーティリティによる診断コマンド・リクエスト
> jcmd 5485 sun.tools.jcmd.JCmd 2125 MyProgram > jcmd MyProgram help (or "jcmd 2125 help") 2125: The following commands are available: JFR.stop JFR.start JFR.dump JFR.check VM.native_memory VM.check_commercial_features VM.unlock_commercial_features ManagementAgent.stop ManagementAgent.start_local ManagementAgent.start Thread.print GC.class_stats GC.class_histogram GC.heap_dump GC.run_finalization GC.run VM.uptime VM.flags VM.system_properties VM.command_line VM.version help > jcmd MyProgram help Thread.print 2125: Thread.print Print all threads with stacktraces. Impact: Medium: Depends on the number of threads. Permission: java.lang.management.ManagementPermission(monitor) Syntax : Thread.print [options] Options: (options must be specified using the <key> or <key>=<value> syntax) -l : [optional] print java.util.concurrent locks (BOOLEAN, false) > jcmd MyProgram Thread.print 2125: 2014-07-04 15:58:56 Full thread dump Java HotSpot(TM) 64-Bit Server VM (25.0-b69 mixed mode): ...
次の項では、jcmd
ユーティリティでの便利なコマンドおよびトラブルシューティング手法について説明します。
使用可能な診断コマンドはHotSpot VMのバージョンごとに異なる場合があるので、jcmd <process id/main class> help
を使用して、使用可能なすべてのオプションを確認することをお薦めします。JDK 8以降のツールに含まれている非常に役立つコマンドの一部を次に示します。jcmd <process id/main class> help <command>
を使用すれば、該当するコマンドのその他のオプションをいつでも確認できることを覚えておいてください。
HotSpotおよびJDKのバージョンIDの出力
jcmd <process id/main class> VM.version
VMに設定されているすべてのシステム・プロパティの出力
数百行の情報が表示される可能性があります。
jcmd <process id/main class> VM.system_properties
VMで使用されるすべてのフラグの出力
フラグを指定していない場合でも、いくつかのデフォルト値(初期ヒープ・サイズや最大ヒープ・サイズなど)が表示されます。
jcmd <process id/main class> VM.flags
稼働時間(秒)の出力
jcmd <process id/main class> VM.uptime
クラス・ヒストグラムの作成
出力結果が冗長になる可能性があるので、出力をファイルにリダイレクトできます。内部クラスとアプリケーション固有のクラスの両方がリストに含まれます。メモリーの消費量が最も多いクラスから降順に表示されます。
jcmd <process id/main class> GC.class_histogram
ヒープ・ダンプ(hprofダンプ)の作成
jcmd GC.heap_dump filename=Myheapdump
これはjmap -dump:file=<file> <pid>
を使用する方法と同じですが、推奨ツールはjcmd
です。
ヒープ・ヒストグラムの作成
jcmd <process id/main class> GC.class_histogram filename=Myheaphistogram
これはjmap -histo <pid>
を使用する方法と同じですが、推奨ツールはjcmd
です。
スタック・トレースのあるすべてのスレッドの出力
jcmd <process id/main class> Thread.print
jcmd
ユーティリティでは、次のトラブルシューティング・オプションを使用できます。
記録の開始
たとえば、識別子が7060
の実行中Javaプロセスで2分間の記録を開始し、それを現在のディレクトリのmyrecording.jfrに保存するには、次を使用します。
jcmd 7060 JFR.start name=MyRecording settings=profile delay=20s duration=2m filename=C:\TEMP\myrecording.jfr
記録の確認
JFR.check
診断コマンドは、実行中の記録を確認します。次に例を示します。
jcmd 7060 JFR.check
記録の停止
JFR.stop
診断コマンドは、実行中の記録を停止し、記録データを破棄することもできます。次に例を示します。
jcmd 7060 JFR.stop
記録のダンプ
JFR.dump
診断コマンドは、実行中の記録を停止し、記録をファイルにダンプすることもできます。次に例を示します。
jcmd 7060 JFR.dump name=MyRecording filename=C:\TEMP\myrecording.jfr
ヒープ・ダンプの作成
ヒープ・ダンプを作成する推奨方法を次に示します。
jcmd <pid> GC.heap_dump filename=Myheapdump
ヒープ・ヒストグラムの作成
ヒープ・ヒストグラムを作成する推奨方法を次に示します。
jcmd <pid> GC.class_histogram filename=Myheaphistogram