Upload
tsunenaga-hanyuda
View
4.494
Download
0
Embed Size (px)
DESCRIPTION
日本Javaユーザーグループ JJUG ナイトセミナー 2 月 27 日(水) http://www.java-users.jp/?p=309
Citation preview
jcmd をさわってみよう
羽生田 恒永
1
2
ここで示されている見解は私個人のものであり、所属会社の見解を反映したものではありません
3
目次
• 自己紹介• jcmd の紹介• デモ• まとめ
4
自己紹介
• 羽生田 恒永(はにゅうだ・つねなが)
• 所属:日本オラクル株式会社
• ミドルウェアのコンサルティング業務を担当– Oracle WebLogic Server– Oracle Coherence– Oracle Application Server…
5
jcmd をさわってみよう
• jcmd とは– Java 7u4 HotSpot から利用できるようになった診
断ツールの一種– JRockit で提供されていた JRCMD の HotSpot 版
– 主な機能• jps 相当のプロセスリスト出力• PerfCounter.print による性能情報スナップ
ショット出力• スレッドダンプ出力• ヒープダンプ出力• Java FlightRecorder との連携
jcmd をさわってみよう
• 使い方–場所• JDK の bin 以下にあります• <JDK install dir>\bin\jcmd.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 他)
9
コマンド名 impact
機能
VM.commercial_featuresNo 商用機能の有効化と
ステータス確認
ManagementAgent.stop No JMX Agent の停止
ManagementAgent.start_localNo JMX Agent のローカル起
動
ManagementAgent.startNo JMX Agent のリモート起
動
jcmd をさわってみよう
• コマンド一覧(スレッド)
10
コマンド名 impact 機能
Thread.print
Mediumスレッド数に依存
スレッド一覧の出力
-l で concurrent のlock に関するスレッド出力が可能
jcmd をさわってみよう
• コマンド一覧( GC 1of2 )
11
コマンド名 Impact 機能
GC.class_histogram
Highヒープサイズとクラス数に依存
ヒープ上にあるクラスのインスタンス数とバイト数を表示-all で unreachable オブジェクトも表示
GC.heap_dump
Highヒープサイズに依存
ヒープダンプ出力( HPROF形式)-all を指定しない場合にはfull gc がリクエストされる
jcmd をさわってみよう
• コマンド一覧( GC 2of2 )
12
コマンド名 Impact 機能
GC.run_finalizationMediumクラス数に依存
System#runFinalization() の実行
GC.run
Mediumヒープサイズとクラス数に依存
System.gc() の実行
jcmd をさわってみよう
• コマンド一覧( VM 情報 1of2 )
13
コマンド名 impact 機能
VM.uptime
Low 該当 VM の起動時間出力(秒)-date で出力時間を併せて表示
VM.flags
Low 該当 VM に指定された JVM オプションの表示-all で全オプションと値の出力
jcmd をさわってみよう
• コマンド一覧( VM 情報 2of2 )
14
コマンド名 impact 機能
VM.system_properties Low System Properties の表示
VM.command_line Low JVM コマンドラインの表示
VM.version Low バージョン情報の表示
help Low Help ドキュメントの表示
jcmd をさわってみよう
• コマンド一覧( Java FlightRecorder 1of2 )
15
コマンド名 impact 機能
JFR.stop
Low Java FlightRecorder の記録を停止。ファイル名、 recording id などを指定
JFR.start
Low Java FlightRecorder の記録を開始。対象 VM 上で -XX:+UnlockCommercialFeatures および – XX:+FlightRecorder オプションが必要
jcmd をさわってみよう
• コマンド一覧( Java FlightRecorder 2of2 )
16
コマンド名 impact 機能
JFR.dumpHigh 記録中の JFR のスナップショッ
トダンプを取得(記録は継続)
JFR.checkLow JFR の記録オプションの確認
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