jcmd をさわってみよう   羽生田 恒永                1
ここで示されている見解は私個人のものであり、所属会社の見解を反映したものではありません                   2
目次    •   自己紹介    •   jcmdの紹介    •   デモ    •   まとめ3
自己紹介• 羽生田 恒永(はにゅうだ・つねなが)• 所属:日本オラクル株式会社• ミドルウェアのコンサルティング業務を担当  – Oracle WebLogic Server  – Oracle Coherence  – Oracle Appl...
jcmd をさわってみよう• jcmd とは   – Java 7u4 HotSpot から利用できるようになった診断     ツールの一種   – JRockit で提供されていたJRCMDのHotSpot版  – 主な機能     • jp...
jcmd をさわってみよう• 使い方  – 場所    • JDKのbin以下にあります    • <JDK install dir>binjcmd.exe                                       6
jcmd をさわってみよう– コマンド   • $ jcmd       – 起動ノード上で稼働しているJVMの一覧が出力         される   • $ jcmd <pid> help       – 対象ノードで利用可能なコマンド一覧が...
DEMO #1          8
jcmd をさわってみよう• コマンド一覧(JMX他)コマンド名                         impact   機能                              No       商用機能の有効化とVM.com...
jcmd をさわってみよう• コマンド一覧(スレッド)コマンド名          impact    機能               Medium    スレッド一覧の出力               スレッド数に依Thread.print...
jcmd をさわってみよう  • コマンド一覧(GC 1of2)コマンド名                 Impact     機能                      High       ヒープ上にあるクラスのイン         ...
jcmd をさわってみよう• コマンド一覧(GC 2of2)コマンド名           Impact        機能                    Medium    System#runFinalization()GC.run...
jcmd をさわってみよう• コマンド一覧(VM情報 1of2) コマンド名         impact   機能               Low      該当VMの起動時間出力(秒)VM.uptime               -d...
jcmd をさわってみよう• コマンド一覧(VM情報 2of2) コマンド名                  impact   機能 VM.system_properties   Low      System Properties の表示 ...
jcmd をさわってみよう• コマンド一覧(Java FlightRecorder 1of2)コマンド名       impact   機能            Low      Java FlightRecorder の記録を停止。    ...
jcmd をさわってみよう• コマンド一覧(Java FlightRecorder 2of2)コマンド名       impact   機能            High     記録中のJFRのスナップショットJFR.dump       ...
jcmd をさわってみよう• ユースケース – HPROFの動的取得    • ただしheapdumpのみ – JMX remote port を臨時で空けて接続    • JMXオプション無しのJVMプロセスに      対して動的にアタッチ...
DEMO #2          18
jcmdをさわってみよう• JMX リモートポートを空ける   – $ jcmd <pid> ManagementAgent.start     jmxremote.port=<port#>     jmxremote.authenticate...
jcmd をさわってみよう• jcmdは…   – JDK に付属するJava VM診断ツール   – jps, jstat など既存ツールで取得していた情     報を1コマンドに集約      • ただし、用途別に使い分けるのが良いで   ...
jcmd をさわってみよう• QA   – Java 6 など古いバージョンにアタッチできる     か?      • できません(JDK7u4以降のみ)   – Java Mission Control がバンドルされている     JDK...
Upcoming SlideShare
Loading in …5
×

jcmd をさわってみよう

7,208 views

Published on

日本Javaユーザーグループ
JJUG ナイトセミナー 2 月 27 日(水)
http://www.java-users.jp/?p=309

jcmd をさわってみよう

  1. 1. jcmd をさわってみよう 羽生田 恒永 1
  2. 2. ここで示されている見解は私個人のものであり、所属会社の見解を反映したものではありません 2
  3. 3. 目次 • 自己紹介 • jcmdの紹介 • デモ • まとめ3
  4. 4. 自己紹介• 羽生田 恒永(はにゅうだ・つねなが)• 所属:日本オラクル株式会社• ミドルウェアのコンサルティング業務を担当 – Oracle WebLogic Server – Oracle Coherence – Oracle Application Server… 4
  5. 5. jcmd をさわってみよう• jcmd とは – Java 7u4 HotSpot から利用できるようになった診断 ツールの一種 – JRockit で提供されていたJRCMDのHotSpot版 – 主な機能 • jps 相当のプロセスリスト出力 • PerfCounter.print による性能情報スナップ ショット出力 • スレッドダンプ出力 • ヒープダンプ出力 • Java FlightRecorder との連携 5
  6. 6. jcmd をさわってみよう• 使い方 – 場所 • JDKのbin以下にあります • <JDK install dir>binjcmd.exe 6
  7. 7. jcmd をさわってみよう– コマンド • $ jcmd – 起動ノード上で稼働しているJVMの一覧が出力 される • $ jcmd <pid> help – 対象ノードで利用可能なコマンド一覧が出力さ れる • $ jcmd <pid | main class> <command | PerfCounter.print | -f filename> – pid を指定してコマンド実行 – PerfCounter.print : jinfo, jstat などで取 得可能な情報を一度に出力 – -f : file名でファイルに記載されたコマンド 7 を実行可能
  8. 8. DEMO #1 8
  9. 9. jcmd をさわってみよう• コマンド一覧(JMX他)コマンド名 impact 機能 No 商用機能の有効化とVM.commercial_features ステータス確認ManagementAgent.stop No JMX Agent の停止ManagementAgent.start_local No JMX Agent のローカル起動ManagementAgent.start No JMX Agent のリモート起動 9
  10. 10. jcmd をさわってみよう• コマンド一覧(スレッド)コマンド名 impact 機能 Medium スレッド一覧の出力 スレッド数に依Thread.print 存 -l でconcurrent の lock に関するスレッ ド出力が可能 10
  11. 11. jcmd をさわってみよう • コマンド一覧(GC 1of2)コマンド名 Impact 機能 High ヒープ上にあるクラスのイン ヒープサイズとク スタンス数とバイト数を表示 ラス数に依存 -all でunreachable オブジェGC.class_histogram クトも表示 High ヒープダンプ出力(HPROF形 ヒープサイズに依 式)GC.heap_dump 存 -all を指定しない場合には full gc がリクエストされる 11
  12. 12. jcmd をさわってみよう• コマンド一覧(GC 2of2)コマンド名 Impact 機能 Medium System#runFinalization()GC.run_finalization クラス数に依存 の実行 Medium System.gc() の実行 ヒープサイズとクGC.run ラス数に依存 12
  13. 13. jcmd をさわってみよう• コマンド一覧(VM情報 1of2) コマンド名 impact 機能 Low 該当VMの起動時間出力(秒)VM.uptime -date で出力時間を併せて表示 Low 該当VMに指定されたJVMオプ ションの表示VM.flags -all で全オプションと値の出 力 13
  14. 14. jcmd をさわってみよう• コマンド一覧(VM情報 2of2) コマンド名 impact 機能 VM.system_properties Low System Properties の表示 VM.command_line Low JVM コマンドラインの表示 VM.version Low バージョン情報の表示 help Low Help ドキュメントの表示 14
  15. 15. jcmd をさわってみよう• コマンド一覧(Java FlightRecorder 1of2)コマンド名 impact 機能 Low Java FlightRecorder の記録を停止。 ファイル名、recording id などを指定JFR.stop Low Java FlightRecorder の記録を開始。対 象VM上で-XX:+UnlockCommercialFeatures および –XX:+FlightRecorder オプションJFR.start が必要 15
  16. 16. jcmd をさわってみよう• コマンド一覧(Java FlightRecorder 2of2)コマンド名 impact 機能 High 記録中のJFRのスナップショットJFR.dump ダンプを取得(記録は継続) Low JFR の記録オプションの確認JFR.check 16
  17. 17. jcmd をさわってみよう• ユースケース – HPROFの動的取得 • ただしheapdumpのみ – JMX remote port を臨時で空けて接続 • JMXオプション無しのJVMプロセスに 対して動的にアタッチ 17
  18. 18. DEMO #2 18
  19. 19. jcmdをさわってみよう• JMX リモートポートを空ける – $ jcmd <pid> ManagementAgent.start jmxremote.port=<port#> jmxremote.authenticate=false jmxremote.ssl=false ※authenticate, ssl 設定解除はセキュリティ 上の問題があるので注意してください 19
  20. 20. jcmd をさわってみよう• jcmdは… – JDK に付属するJava VM診断ツール – jps, jstat など既存ツールで取得していた情 報を1コマンドに集約 • ただし、用途別に使い分けるのが良いで しょう – さらなる機能拡張、Java FlightRecorder と の連携強化に期待• 結論 – まだまだです! 20
  21. 21. jcmd をさわってみよう• QA – Java 6 など古いバージョンにアタッチできる か? • できません(JDK7u4以降のみ) – Java Mission Control がバンドルされている JDKの入手方法は? • My Oracle Support からダウンロードして ください 21

×