LoginSignup
47
38

More than 5 years have passed since last update.

Java7からのjcmdのススメ(ThreadDump/HeapDump他)

Last updated at Posted at 2014-03-31

Java7(JDK1.7)からjcmdという診断ツールが追加されました。
元はJrockitというVM(Oracleが買収したBEAが開発してきてたJavaVM)に付属していたjrcmdを移植したツールです。

Java6までの方法も継続して使えますが、折角なのでjcmdを使った方法も試してましょう。

(※JDK7u4以降で使用可能です。)

JavaプロセスID取得

$ jcmd

jps -lと同じ

スレッドダンプ出力

$ jcmd <pid> Thread.print 

jstack <pid>と同じ

ヒープダンプ出力

$ jcmd <pid> GC.heap_dump /fullpath/to/dump_file

jmap -dump:format=b,file=/fullpath/to/dump_file <pid>と同じ

他のコマンド

とまぁ、基本的に既存コマンドの代替が多いですが、jcmdには他にも以下の様なコマンドが用意されています。

書式

$ jcmd <pid> <command> <option>

コマンド一覧

  • VM.uptime 起動時間(秒)
  • VM.flags 起動オプションの表示
  • VM.flags -all 全オプションの値表示
  • VM.system_properties Systemプロパティの表示
  • VM.command_line 起動時のコマンドライン表示
  • VM.version バージョン表示
  • GC.run System.gc()の実行
  • GC.run_finalization System#runFinalization()の実行
  • GC.class_histogram ヒープ上のインスタンス数、バイト数出力

備考

javaのプロセス出力だけで言えば、

jps -lv

が起動時のコマンドまで出力してくれて、複数のjavaプロセスが動いているときなどに把握しやすかったりするなど、既存のコマンドが不要になったわけではありません。
また、jcmdでぐぐってもj r cmd (jrockit付属時のコマンド名)が多く引っかかったりするなど、どれだけ使われているのかも甚だ疑問です。(既存のコマンドで代替可能だし)

とはいえ、バージョン表示やSystemプロパティなどが取得しやすくなっていたりするのでツールは目的に応じて使い分けていくのがいいと思います。

47
38
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
47
38