狠狠撸

狠狠撸Share a Scribd company logo
jcmd をさわってみよう

   羽生田 恒永



                1
ここで示されている見解は私個人の
ものであり、所属会社の見解を反映
したものではありません




                   2
目次



    ?   自己紹介
    ?   jcmdの紹介
    ?   デモ
    ?   まとめ



3
自己紹介

? 羽生田 恒永(はにゅうだ?つねなが)

? 所属:日本オラクル株式会社

? ミドルウェアのコンサルティング業務を担当
  – Oracle WebLogic Server
  – Oracle Coherence
  – Oracle Application Server…

                                 4
jcmd をさわってみよう

? jcmd とは
   – Java 7u4 HotSpot から利用できるようになった診断
     ツールの一種
   – JRockit で提供されていたJRCMDのHotSpot版

  – 主な機能
     ? jps 相当のプロセスリスト出力
     ? PerfCounter.print による性能情報スナップ
       ショット出力
     ? スレッドダンプ出力
     ? ヒープダンプ出力
     ? Java FlightRecorder との連携        5
jcmd をさわってみよう

? 使い方
  – 場所
    ? JDKのbin以下にあります
    ? <JDK install dir>binjcmd.exe




                                       6
jcmd をさわってみよう
– コマンド
   ? $ jcmd
       – 起動ノード上で稼働しているJVMの一覧が出力
         される
   ? $ jcmd <pid> help
       – 対象ノードで利用可能なコマンド一覧が出力さ
         れる
   ? $ jcmd <pid | main class> <command |
     PerfCounter.print | -f filename>
       – pid を指定してコマンド実行
       – PerfCounter.print : jinfo, jstat などで取
         得可能な情報を一度に出力
       – -f : file名でファイルに記載されたコマンド               7
         を実行可能
DEMO #1




          8
jcmd をさわってみよう

? コマンド一覧(JMX他)
コマンド名                         impact   機能
                              No       商用機能の有効化と
VM.commercial_features                 ステータス確認

ManagementAgent.stop          No       JMX Agent の停止

ManagementAgent.start_local   No       JMX Agent のローカル起動

ManagementAgent.start         No       JMX Agent のリモート起動




                                                       9
jcmd をさわってみよう

? コマンド一覧(スレッド)

コマンド名          impact    機能
               Medium    スレッド一覧の出力
               スレッド数に依
Thread.print   存         -l でconcurrent の
                         lock に関するスレッ
                         ド出力が可能




                                       10
jcmd をさわってみよう

  ? コマンド一覧(GC 1of2)
コマンド名                 Impact     機能
                      High       ヒープ上にあるクラスのイン
                      ヒープサイズとク   スタンス数とバイト数を表示
                      ラス数に依存     -all でunreachable オブジェ
GC.class_histogram               クトも表示



                      High       ヒープダンプ出力(HPROF形
                      ヒープサイズに依   式)
GC.heap_dump          存          -all を指定しない場合には
                                 full gc がリクエストされる

                                                  11
jcmd をさわってみよう

? コマンド一覧(GC 2of2)
コマンド名           Impact        機能
                    Medium    System#runFinalization()
GC.run_finalization クラス数に依存   の実行

                Medium   System.gc() の実行
                ヒープサイズとク
GC.run
                ラス数に依存




                                                    12
jcmd をさわってみよう

? コマンド一覧(VM情報 1of2)

 コマンド名         impact   機能
               Low      該当VMの起動時間出力(秒)
VM.uptime               -date で出力時間を併せて表示

               Low      該当VMに指定されたJVMオプ
                        ションの表示
VM.flags
                        -all で全オプションと値の出
                        力




                                      13
jcmd をさわってみよう

? コマンド一覧(VM情報 2of2)
 コマンド名                  impact   機能

 VM.system_properties   Low      System Properties の表示

 VM.command_line        Low      JVM コマンドラインの表示

 VM.version             Low      バージョン情報の表示

 help                   Low      Help ドキュメントの表示




                                                    14
jcmd をさわってみよう

? コマンド一覧(Java FlightRecorder 1of2)
コマンド名       impact   機能


            Low      Java FlightRecorder の記録を停止。
                     ファイル名、recording id などを指定
JFR.stop


            Low      Java FlightRecorder の記録を開始。対
                     象VM上で-XX:+UnlockCommercialFeatures
                     および –XX:+FlightRecorder オプション
JFR.start            が必要



                                                    15
jcmd をさわってみよう

? コマンド一覧(Java FlightRecorder 2of2)

コマンド名       impact   機能
            High     記録中のJFRのスナップショット
JFR.dump
                     ダンプを取得(記録は継続)
            Low      JFR の記録オプションの確認
JFR.check




                                       16
jcmd をさわってみよう


? ユースケース

 – HPROFの動的取得
    ? ただしheapdumpのみ

 – JMX remote port を臨時で空けて接続
    ? JMXオプション無しのJVMプロセスに
      対して動的にアタッチ
                           17
DEMO #2




          18
jcmdをさわってみよう

? JMX リモートポートを空ける
   – $ jcmd <pid> ManagementAgent.start
     jmxremote.port=<port#>
     jmxremote.authenticate=false
     jmxremote.ssl=false

  ※authenticate, ssl 設定解除はセキュリティ
   上の問題があるので注意してください


                                          19
jcmd をさわってみよう

? jcmdは…
   – JDK に付属するJava VM診断ツール
   – jps, jstat など既存ツールで取得していた情
     報を1コマンドに集約
      ? ただし、用途別に使い分けるのが良いで
        しょう
   – さらなる機能拡張、Java FlightRecorder と
     の連携強化に期待
? 結論
   – まだまだです!
                                 20
jcmd をさわってみよう

? QA
   – Java 6 など古いバージョンにアタッチできる
     か?
      ? できません(JDK7u4以降のみ)
   – Java Mission Control がバンドルされている
     JDKの入手方法は?
      ? My Oracle Support からダウンロードして
        ください


                                  21

More Related Content

jcmd をさわってみよう

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