jcmdコマンド2021/10/08 JDKのjcmdコマンドについて jcmdとは jcmdユーティリティは、実行中のJava仮想マシン(JVM)に診断コマンド要求を送信する場合に使用します。 例えばこんなときにつかう 要求 No.1:スレッドダンプ取得 jcmd <pid> Thread.print 要求 No.2:フライトレコード jcmd <pid> JFR.start duration=1m filename=app.jfr 要求 No.3:ログ設定追加 jcmd <pid> VM.log output="sample.log" output_options="filecount=3" jcmdでのコマンドのドメイン jcmd command(ドメイン.操作という形式) ドメイン 内容 VM JVMの実行情報取得 ログ設定など Compiler JITコンパイラ関連 GC ガベージコレクション関連 Thread 現状スレッドダンプのみ JVMTI JVM Tool Interface関連 エージェントのロードなど JFR フライトレコード関連 ManagementAgent JMXエージェント関連 コマンドとは別個の命令としてPerfcounter.printもある 用途 コマンド 利用できるコマンドを確認する jcmd <pid> help 各コマンドの詳細を確認する jcmd <pid> help <command> pidを調べる jcmd jps Threadドメイン jcmd <pid> Thread.print VMドメイン GCドメイン Compilerドメイン JVMTIドメイン ManagementAgentドメイン JFRドメイン jcmd <pid> JFR.start duration=1m filename=app.jfr jcmd <pid> JFR.stop jcmd <pid> JFR.dump filename=app.jfr 分析ツール JDK Mission Control(JMC) jfrコマンド jfrコマンド jfr [サブコマンド] … jfrファイル サブコマンド 内容 summary フライトレコードの統計を出力する print フライトレコードのコンテンツを出力する assemble 複数のjfrファイルを1つにまとまる disassemble jfrファイルを複数に分割する metadata メタデータとしてイベントそのものに関する情報を出力する 起動後にjcmdでフライトレコードを取得できる jfrコマンド GUIツールを起動せずにフライトレコードの内容を確認できる便利さ 確認する内容がはっきりしているとき GUIツールを使えないとき 使わなくなったコマンドたち jcmdで同様のことができるコマンド jstack jinfo jcmd VMドメインにあるコマンドたちを使用 jmap 例)ヒープダンプ:GC.heap_dump 例)ヒープヒストグラム:GC.class_histogram jcmdはローカルプロセスのみ